using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorUi;

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {
        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.BillingFormLoaded += BillingEngine_BillingFormLoaded;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.BillingFormLoaded -= BillingEngine_BillingFormLoaded;
        }

        void BillingEngine_BillingFormLoaded(object sender, EventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            if (billingEngine.BillingForm.LinesEditor != null)
            {
                MercatorUi.GridPro.DataGridViewHidableButtonXColumn colButtonMemo = new MercatorUi.GridPro.DataGridViewHidableButtonXColumn();
                colButtonMemo.Name = "ButtonMemo";
                colButtonMemo.HeaderText = "";
                colButtonMemo.Width = 50;
                colButtonMemo.BeforeCellPaint += new EventHandler<DevComponents.DotNetBar.Controls.BeforeCellPaintEventArgs>(colButtonMemo_BeforeCellPaint);
                billingEngine.BillingForm.LinesEditor.Grid.Columns.Add(colButtonMemo);
                billingEngine.BillingForm.LinesEditor.Grid.CellSuperClick += new MercatorUi.GridPro.CellSuperClickHandler(Grid_CellSuperClick);
            }
        }

        void colButtonMemo_BeforeCellPaint(object sender, DevComponents.DotNetBar.Controls.BeforeCellPaintEventArgs e)
        {
            if ((e.ColumnIndex > -1) && (e.RowIndex > -1))
            {
                MercatorUi.GridPro.DataGridViewHidableButtonXColumn colButtonMemo = (MercatorUi.GridPro.DataGridViewHidableButtonXColumn)sender;
                DataTable dt = (DataTable)colButtonMemo.DataGridView.DataSource;
                if (dt.Rows[Api.DataGridViewRowToDataTableRowIndex(colButtonMemo.DataGridView.Rows[e.RowIndex])]["memo"].ToString() != "")
                    colButtonMemo.DataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Api.Iif_langue(Globals.Langue, "Merkz.", "Memo", "Memo", "Mémo");
                else
                    colButtonMemo.DataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = Api.Iif_langue(Globals.Langue, "merkz.", "memo", "memo", "mémo");
            }
        }

        void Grid_CellSuperClick(object sender, DataGridViewCellEventArgs e)
        {
            MercatorUi.GridPro.DataGridViewXPro grid = (MercatorUi.GridPro.DataGridViewXPro)sender;
            if ((e.ColumnIndex < 0 || e.RowIndex < 0) || (grid.Columns[e.ColumnIndex].Name != "ButtonMemo"))
                return;

            DataTable dt = (DataTable)grid.DataSource;
            DataRow currentRow = dt.Rows[Api.DataGridViewRowToDataTableRowIndex(grid.Rows[e.RowIndex])];

            string memo = Dialogs.AskMemo(string.Format("Memo ligne {0} ?", e.RowIndex + 1), currentRow["memo"].ToString(), grid.FindForm());
            if (!dt.Columns["memo"].ReadOnly && (memo != null)) // on n'a pas cliqué sur "Annuler"
                currentRow["memo"] = memo.Trim();
        }
    }
}