using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Windows.Forms;
using MercatorApi;
using MercatorUi;
using MercatorExtensions;
using MercatorDatabase;

// <CompileWithRoslyn />

namespace Action
{
    public class Customizer : MercatorUi.ICustomizers.IActionEngineCreated, MercatorUi.ICustomizers.IActionEngineClosed
    {

        public void ActionEngineCreated(MercatorUi.Engine.Crm.ActionEngine actionEngine)
        {
            actionEngine.AfterSave += actionEngine_AfterSave;
        }

        public void ActionEngineClosed(MercatorUi.Engine.Crm.ActionEngine actionEngine)
        {
            actionEngine.AfterSave -= actionEngine_AfterSave;
        }

        void actionEngine_AfterSave(object sender, EventArgs e)
        {
            MercatorUi.Engine.Crm.ActionEngine actionEngine = (MercatorUi.Engine.Crm.ActionEngine)sender;
            if ((actionEngine.ActionsRecord.PAR_ID != "") && (actionEngine.ActionsRecord.PAR_MODULE != ""))
            {
                object ox = Api.ZselectDirect(Globals.RepData, "select id from FILES where (filepath=@filepathchild) and (filename is null)", new MercatorSqlParam("@filepathchild", Api.AddBS(actionEngine.SqlFileViewDefaultDirectory), SqlDbType.Char));
                if (ox is Guid id)
                {
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        cmd.CommandText = @"
                            if not exists(select * from FILES where (filepath = '<Files\Actions\'+@par_module+'\') and (filename is null))
                                insert into FILES (filepath) values ('<Files\Actions\'+@par_module+'\')
                            if not exists(select * from FILES where (filepath = '<Files\Actions\'+@par_module+'\'+@par_id+'\') and (filename is null))
                                insert into FILES (filepath) values ('<Files\Actions\'+@par_module+'\'+@par_id+'\')
                            if exists(select * from FILES where (filepath = '<Files\Actions\'+@par_module+'\'+@par_id+'\') and (filename like @idchild + '%.sqlfilealias'))
                                delete from FILES where (filepath = '<Files\Actions\'+@par_module+'\'+@par_id+'\') and (filename like @idchild + '%.sqlfilealias')
                            insert into FILES (filepath,[filename],filecontent) values ('<Files\Actions\'+@par_module+'\'+@par_id+'\',  @idchild + ' - ' + @objetchild + '.sqlfilealias', @id)".UnIndent(7);

                        cmd.Parameters.AddWithValue("@id", id.ToByteArray()).SqlDbType = SqlDbType.VarBinary;
                        cmd.Parameters.AddWithValue("@idchild", actionEngine.Id).SqlDbType = SqlDbType.Char;
                        cmd.Parameters.AddWithValue("@objetchild", actionEngine.ActionsRecord.OBJET).SqlDbType = SqlDbType.Char;
                        cmd.Parameters.AddWithValue("@par_module", actionEngine.ActionsRecord.PAR_MODULE).SqlDbType = SqlDbType.Char;
                        cmd.Parameters.AddWithValue("@par_id", actionEngine.ActionsRecord.PAR_ID).SqlDbType = SqlDbType.Char;
                        Api.SqlExec(Globals.RepData, cmd);
                    }
                }
            }
        }
    }
}