using System;
using System.Collections.Generic;
using System.Text;
using FirebirdSql.Data.FirebirdClient;
using System.Data;
using System.Collections;


namespace FPER
{

    /*******************************************************************************************
     * TB_BOARD(����) ���� ���� Dac
     *******************************************************************************************/
    public class DacBoardConfig : DacBase
    {
        public DacBoardConfig(int ID)
            : base(ID)// cyim 2015.7.30 ����Ÿ���̽� ���� ��ƾ ����
        {
            //try {
            //  base.Connect();
            //}
            //catch (Exception ex) {
            //  Util.UErrorMessage(ex, 0, 0);
            //}
        }


        ~DacBoardConfig()
        {
            //try {
            //  base.DisConnect();
            //}
            //catch (Exception ex) {
            //  Util.UErrorMessage(ex, 0, 0);
            //}
        }

        // RECEIVER_ID              INTEGER NOT NULL,     /* RECEIVER ID (1 - 32)  */
        //COMM_ID                  INTEGER NOT NULL,     /* COMM ID (1 - 4)       */
        //BOARD_ID                 INTEGER NOT NULL,     /* BOARD ID (1 - 16)     */
        //BOARD_NAME               VARCHAR(40),          /* BOARD NAME            */
        //USE_FLAG                 VARCHAR(1),           /* USE FLAG (Y/N)        */
        //UPDATE_USER_ID           VARCHAR(10),          /* UPDATE USER ID        */
        //UPDATE_TIME              TIMESTAMP,            /* UPDATE TIME           */


		// cyim 2016.10.31 : ���������� 0,1,2,3 ���� ����
        public DataTable SelectBoard(int RECEIVER_ID)
        {
            DataTable dt = null;
            try
            {
                String SQL = "";                
                SQL += "SELECT BOARD_ID,BOARD_NAME,LOOP0_USE_FLAG,LOOP1_USE_FLAG,LOOP2_USE_FLAG,LOOP3_USE_FLAG,USE_FLAG";
                SQL += " ,MAIN_VERSION,SUB_VERSION,BAUD_RATE,LOOP0_BAUD_RATE,LOOP1_BAUD_RATE,LOOP2_BAUD_RATE,LOOP3_BAUD_RATE";
                SQL += " ,LOOP0_CUT_FLAG,LOOP1_CUT_FLAG,LOOP2_CUT_FLAG,LOOP3_CUT_FLAG ,COMM_ID";
                SQL += " FROM TB_BOARD WHERE RECEIVER_ID = {0}  ";
                SQL += " ORDER BY BOARD_ID";
                SQL = String.Format(SQL, RECEIVER_ID);

                DataSet dao = Select(SQL);
                dt = dao.Tables[0];
            }
            catch (Exception ex)
            {
                Util.UErrorMessage(ex, 0, 0);
                throw ex;
            }
            return dt;
        }

		// cyim 2016.10.31 : ���������� 0,1,2,3 ���� ����
        public DataTable Board_Select(int RECEIVER_ID, int BOARD_ID, String UseFlag)
        {
            DataTable dt = null;

            try
            {
                String SQL = "";

                if (BOARD_ID == 0)
                {
                    SQL += "SELECT BOARD_ID,BOARD_NAME,LOOP0_USE_FLAG,LOOP1_USE_FLAG,LOOP2_USE_FLAG,LOOP3_USE_FLAG,USE_FLAG";
                    SQL += " ,MAIN_VERSION,SUB_VERSION,BAUD_RATE,LOOP0_BAUD_RATE,LOOP1_BAUD_RATE,LOOP2_BAUD_RATE,LOOP3_BAUD_RATE";
                    SQL += " ,LOOP0_CUT_FLAG,LOOP1_CUT_FLAG,LOOP2_CUT_FLAG,LOOP3_CUT_FLAG ";
                    SQL += " FROM TB_BOARD WHERE RECEIVER_ID = {0} AND COMM_ID = 1 ";
                    if (UseFlag != null) SQL += " AND USE_FLAG = '" + UseFlag + "'";
                    SQL += " ORDER BY BOARD_ID";
                    SQL = String.Format(SQL, RECEIVER_ID);
                }
                else
                {
                    SQL += "SELECT BOARD_ID,BOARD_NAME,LOOP0_USE_FLAG,LOOP1_USE_FLAG,LOOP2_USE_FLAG,LOOP3_USE_FLAG,USE_FLAG";
                    SQL += " ,MAIN_VERSION,SUB_VERSION,BAUD_RATE,LOOP0_BAUD_RATE,LOOP1_BAUD_RATE,LOOP2_BAUD_RATE,LOOP3_BAUD_RATE";
                    SQL += " ,LOOP0_CUT_FLAG,LOOP1_CUT_FLAG,LOOP2_CUT_FLAG,LOOP3_CUT_FLAG ";
                    SQL += " FROM TB_BOARD  WHERE RECEIVER_ID = {0} AND COMM_ID = 1 AND  BOARD_ID = {1}";
                    if (UseFlag != null) SQL += " AND USE_FLAG = '" + UseFlag + "'";

                    SQL = String.Format(SQL, RECEIVER_ID, BOARD_ID);
                }


                DataSet dao = Select(SQL);

                dt = dao.Tables[0];


            }
            catch (Exception ex)
            {
                Util.UErrorMessage(ex, 0, 0);
                throw ex;
            }


            return dt;

        }

        //��ź��� ID �ְ��� ����
        public int BoardID_Max(int RECEIVER_ID)
        {
            int BoardId = 0;
            try
            {
                String SQL = String.Format("SELECT MAX(BOARD_ID) FROM TB_BOARD WHERE RECEIVER_ID = {0} AND COMM_ID = 1", RECEIVER_ID);
                DataSet dao = Select(SQL);
                DataTable dt = dao.Tables[0];

                if (dt.Rows.Count > 0)
                {

                    foreach (DataRow dr in dt.Rows)
                    {
                        if (!dr[0].ToString().Equals(""))
                            BoardId = int.Parse(dr[0].ToString());
                    }
                }

            }
            catch (Exception ex)
            {
                Util.UErrorMessage(ex, 0, 0);
                throw ex;
            }

            return ++BoardId;
        }

        // cyim 2016.12.07 : ���ű� �𵨺� ���� ���� ����
        public void Board_Cut_Update(int RECEIVER_ID, int BOARD_ID, String LOOP0_CUT_FLAG, String LOOP1_CUT_FLAG)
        {
            try
            {

                DataTable dt = Board_Select(RECEIVER_ID, BOARD_ID, null);

                String SQL = "";

                if (dt.Rows.Count > 0)
                {
                    SQL = "UPDATE TB_BOARD SET  LOOP0_CUT_FLAG = '{0}'";
                    SQL += ", LOOP1_CUT_FLAG = '{1}'";
                    SQL += ", UPDATE_USER_ID = 'FPER', UPDATE_TIME = current_timestamp";
                    SQL += " WHERE RECEIVER_ID = {2} AND COMM_ID = 1 AND BOARD_ID = {3}";

                    SQL = String.Format(SQL, LOOP0_CUT_FLAG, LOOP1_CUT_FLAG, RECEIVER_ID, BOARD_ID);
                    ExecuteNonQuery(SQL);

                }
                else
                {
                    throw new Exception("�ش� �ڷḦ ã���� �����ϴ�.");
                }

            }
            catch (Exception ex)
            {
                Util.UErrorMessage(ex, 0, 0);
                throw ex;
            }

        }

        // cyim 2016.10.31 : ���������� 0,1,2,3 ���� ����
        public void Board_Cut_Update(int RECEIVER_ID, int BOARD_ID, String LOOP0_CUT_FLAG, String LOOP1_CUT_FLAG, String LOOP2_CUT_FLAG, String LOOP3_CUT_FLAG)
        {
            try
            {
                DataTable dt = Board_Select(RECEIVER_ID, BOARD_ID, null);

                String SQL = "";

                if (dt.Rows.Count > 0)
                {
                    SQL = "UPDATE TB_BOARD SET  LOOP0_CUT_FLAG = '{0}'";
                    SQL += ", LOOP1_CUT_FLAG = '{1}'";
                    SQL += ", LOOP2_CUT_FLAG = '{2}'";
                    SQL += ", LOOP3_CUT_FLAG = '{3}'";
                    SQL += ", UPDATE_USER_ID = 'FPER', UPDATE_TIME = current_timestamp";
                    SQL += " WHERE RECEIVER_ID = {4} AND COMM_ID = 1 AND BOARD_ID = {5}";

                    SQL = String.Format(SQL, LOOP0_CUT_FLAG, LOOP1_CUT_FLAG,LOOP2_CUT_FLAG, LOOP3_CUT_FLAG, RECEIVER_ID, BOARD_ID);
                    ExecuteNonQuery(SQL);
                }
                else
                {
                    throw new Exception("�ش� �ڷḦ ã���� �����ϴ�.");
                }
            }
            catch (Exception ex)
            {
                Util.UErrorMessage(ex, 0, 0);
                throw ex;
            }
        }

        // cyim 2016.10.31 : ���������� 0,1,2,3 ���� ����
        public void Board_Update(QUERYMode cmd, int RECEIVER_ID, int BOARD_ID, String BOARD_NAME, String USE_FLAG, 
            String LOOP0_USE_FLAG, String LOOP1_USE_FLAG, String LOOP2_USE_FLAG, String LOOP3_USE_FLAG, 
            int BAUD_RATE, int LOOP0_BAUD_RATE, int LOOP1_BAUD_RATE, int LOOP2_BAUD_RATE, int LOOP3_BAUD_RATE, 
            int MAIN_VERSION, int SUB_VERSION)
        {
            try
            {
                DataTable dt = Board_Select(RECEIVER_ID, BOARD_ID, null);

                if (cmd == QUERYMode.insert || cmd == QUERYMode.update || cmd == QUERYMode.InsertAndUpdate)
                {
                    String SQL = "";

                    if (dt.Rows.Count > 0)
                    {
                        SQL = "UPDATE TB_BOARD SET  BOARD_NAME = '{0}'";
                        SQL += ", USE_FLAG = '{1}'";
                        SQL += ", LOOP0_USE_FLAG = '{2}', LOOP1_USE_FLAG = '{3}'";
                        SQL += ", LOOP2_USE_FLAG = '{4}', LOOP3_USE_FLAG = '{5}'";
                        SQL += ", BAUD_RATE = {6}, LOOP0_BAUD_RATE = {7}";
                        SQL += ", LOOP1_BAUD_RATE = {8}";
                        SQL += ", LOOP2_BAUD_RATE = {9}";
                        SQL += ", LOOP3_BAUD_RATE = {10}";
                        SQL += ", MAIN_VERSION = {11}, SUB_VERSION = {12}";
                        SQL += ", UPDATE_USER_ID = 'FPER', UPDATE_TIME = current_timestamp";
                        SQL += " WHERE RECEIVER_ID = {13} AND COMM_ID = 1 AND BOARD_ID = {14}";

                        SQL = String.Format(SQL, BOARD_NAME, USE_FLAG, LOOP0_USE_FLAG, LOOP1_USE_FLAG, LOOP2_USE_FLAG, LOOP3_USE_FLAG
                            , BAUD_RATE, LOOP0_BAUD_RATE, LOOP1_BAUD_RATE, LOOP2_BAUD_RATE, LOOP3_BAUD_RATE, MAIN_VERSION, SUB_VERSION
                            , RECEIVER_ID, BOARD_ID);
                    }
                    else
                    {
                        SQL = "INSERT INTO TB_BOARD ( ";
                        SQL += " RECEIVER_ID,COMM_ID,BOARD_ID,BOARD_NAME,LOOP0_USE_FLAG,LOOP1_USE_FLAG,LOOP2_USE_FLAG,LOOP3_USE_FLAG";
                        SQL += ",BAUD_RATE,LOOP0_BAUD_RATE,LOOP1_BAUD_RATE,LOOP2_BAUD_RATE,LOOP3_BAUD_RATE,MAIN_VERSION,SUB_VERSION";
                        SQL += ",USE_FLAG,UPDATE_USER_ID,UPDATE_TIME";
                        SQL += ") VALUES ({0},1,{1},'{2}','{3}','{4}','{5}','{6}',{7},{8},{9},{10},{11},{12},{13},'{14}','FPER',current_timestamp)";

                        SQL = String.Format(SQL, RECEIVER_ID, BOARD_ID, BOARD_NAME, LOOP0_USE_FLAG, LOOP1_USE_FLAG, LOOP2_USE_FLAG, LOOP3_USE_FLAG
                            , BAUD_RATE, LOOP0_BAUD_RATE, LOOP1_BAUD_RATE,LOOP2_BAUD_RATE, LOOP3_BAUD_RATE, MAIN_VERSION, SUB_VERSION
                            , USE_FLAG);
                    }

                    ExecuteNonQuery(SQL);
                }
                else if (cmd == QUERYMode.delete)
                {

                    if (dt.Rows.Count < 1)
                    {
                        throw new Exception("�ش� �ڷḦ ã���� �����ϴ�.");
                    }

                    String SQL = "UPDATE  TB_BOARD SET USE_FLAG = 'N' ";
                    SQL += ", UPDATE_USER_ID = 'FPER', UPDATE_TIME = current_timestamp";
                    SQL += " WHERE RECEIVER_ID = {0} AND COMM_ID = 1 AND BOARD_ID = {1}";
                    SQL = String.Format(SQL, RECEIVER_ID, BOARD_ID);

                    ExecuteNonQuery(SQL);
                }
            }
            catch (Exception ex)
            {
                Util.UErrorMessage(ex, 0, 0);
                throw ex;
            }
        }

        //����
        public ArrayList Board_List(int RECEIVER_ID, MDIParent mdi)
        {
            ArrayList ary = null;

            try
            {
                DataTable dt = Board_Select(RECEIVER_ID, 0, "Y");
                if (dt.Rows.Count > 0)
                {

                    ary = new ArrayList();
                    foreach (DataRow dr in dt.Rows)
                    {
                        String BOARD_ID = Convert.ToString(dr["BOARD_ID"]);
                        String BOARD_NAME = Convert.ToString(dr["BOARD_NAME"]);                      
                        
                        // cyim 2017.01.12 : �𵨿� ���� �����Ҽ� �ִ� ��ź��尡 Ʋ����
                        if (mdi.ReceiverModel == "IFC3300")
                        {
                            if (BOARD_ID == "0" || BOARD_ID == "" || BOARD_ID.Length == 0)
                                continue;
                        }
                        else
                        {
                            if (BOARD_ID == "15" || BOARD_ID == "" || BOARD_ID.Length == 0)
                                continue;
                        }
                        ary.Add(new cboitem(BOARD_ID, BOARD_NAME));
                    }

                }
            }
            catch (Exception ex)
            {
                Util.UErrorMessage(ex, 0, 0);
                throw ex;
            }

            return ary;
        }

        //��ź��帮��Ʈ ��ü�߰�
        public ArrayList Board_ListALL(int RECEIVER_ID)
        {
            ArrayList ary = new ArrayList();
            ary.Add(new cboitem("-1", "��ü"));
            try
            {

                DataTable dt = Board_Select(RECEIVER_ID, 0, "Y");
                if (dt.Rows.Count > 0)
                {


                    foreach (DataRow dr in dt.Rows)
                    {
                        String BOARD_ID = Convert.ToString(dr["BOARD_ID"]);
                        String BOARD_NAME = Convert.ToString(dr["BOARD_NAME"]);
                        ary.Add(new cboitem(BOARD_ID, BOARD_ID));
                    }

                }


            }
            catch (Exception ex)
            {
                Util.UErrorMessage(ex, 0, 0);
                throw ex;
            }


            return ary;

        }


        //LOOP��ȸ
        public ArrayList Loop_List(int RECEIVER_ID, int BOARD_ID)
        {
            ArrayList ary = null;

            try
            {
                DataTable dt = Board_Select(RECEIVER_ID, BOARD_ID, "Y");
                if (dt.Rows.Count > 0)
                {
                    ary = new ArrayList();
                    foreach (DataRow dr in dt.Rows)
                    {
                        // cyim 2016.10.31 : ���������� 0,1,2,3 ���� ����
                        String LOOP0_USE_FLAG = Convert.ToString(dr["LOOP0_USE_FLAG"]);
                        String LOOP1_USE_FLAG = Convert.ToString(dr["LOOP1_USE_FLAG"]);
                        String LOOP2_USE_FLAG = Convert.ToString(Util.NullToStr(dr["LOOP2_USE_FLAG"]));
                        String LOOP3_USE_FLAG = Convert.ToString(Util.NullToStr(dr["LOOP3_USE_FLAG"]));

                        if (LOOP0_USE_FLAG == "Y") ary.Add(new cboitem("0", "LOOP0"));
                        if (LOOP1_USE_FLAG == "Y") ary.Add(new cboitem("1", "LOOP1"));
                        if (LOOP2_USE_FLAG == "Y") ary.Add(new cboitem("2", "LOOP2"));
                        if (LOOP3_USE_FLAG == "Y") ary.Add(new cboitem("3", "LOOP3"));
                    }
                }

            }
            catch (Exception ex)
            {
                Util.UErrorMessage(ex, 0, 0);
                throw ex;
            }


            return ary;

        }

        //LOOP��ȸ����Ʈ ��ü�߰�
        public ArrayList Loop_ListALL(int RECEIVER_ID, int BOARD_ID)
        {
            ArrayList ary = new ArrayList();
            ary.Add(new cboitem("-1", "��ü"));

            try
            {
                DataTable dt = Board_Select(RECEIVER_ID, BOARD_ID, "Y");
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        // cyim 2016.10.31 : ���������� 0,1,2,3 ���� ����
                        String LOOP0_USE_FLAG = Convert.ToString(dr["LOOP0_USE_FLAG"]);
                        String LOOP1_USE_FLAG = Convert.ToString(dr["LOOP1_USE_FLAG"]);
                        String LOOP2_USE_FLAG = Convert.ToString(Util.NullToStr(dr["LOOP2_USE_FLAG"]));
                        String LOOP3_USE_FLAG = Convert.ToString(Util.NullToStr(dr["LOOP3_USE_FLAG"]));

                        if (LOOP0_USE_FLAG == "Y") ary.Add(new cboitem("0", "0"));
                        if (LOOP1_USE_FLAG == "Y") ary.Add(new cboitem("1", "1"));
                        if (LOOP2_USE_FLAG == "Y") ary.Add(new cboitem("2", "2"));
                        if (LOOP3_USE_FLAG == "Y") ary.Add(new cboitem("3", "3"));
                    }

                }


            }
            catch (Exception ex)
            {
                Util.UErrorMessage(ex, 0, 0);
                throw ex;
            }


            return ary;

        }

    }
    /*******************************************************************************************/

}