using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using AR;

namespace UniMarc
{
    public partial class Marc_Plan_Sub_MarcEdit : Form
    {
        string idx;
        public int row;
        public string UserName = "";
        Marc_Plan mp;
        Helper_DB db = new Helper_DB();
        String_Text st = new String_Text();
        Search_Infor si;
        Help008Tag tag008 = new Help008Tag();
        public Marc_Plan_Sub_MarcEdit(Marc_Plan _mp)
        {
            InitializeComponent();
            mp = _mp;
            db.DBcon();
        }
        public Marc_Plan_Sub_MarcEdit(Search_Infor _si)
        {
            InitializeComponent();
            si = _si;
            db.DBcon();
        }
        private string mOldMarc = string.Empty;
        private bool mOpenOldMarc = false;
        /// <summary>
        /// 시작전 세팅작업. 필요한 데이터들을 각각의 박스들에 집어넣음.
        /// </summary>
        /// <param name="Marc">0:Marc 1:MarcIdx 2:연번 3:idx 4:ISBN</param>
        public void Init(string[] Marc,bool pOldMarc= false)
        {
            mOpenOldMarc = pOldMarc;
            btn_Back.InvokeEnable(!pOldMarc);
            btn_Front.InvokeEnable(!pOldMarc);
            btn_Save.InvokeEnable(!pOldMarc);
            mOldMarc = Marc[0];
            // 이용자 9
            comboBox1.Items.AddRange(tag008.combo1);

            // 자료형식 3
            comboBox2.Items.AddRange(tag008.combo2);

            // 내용형식 28
            comboBox3.Items.AddRange(tag008.combo3);
            comboBox7.Items.AddRange(tag008.combo3);

            // 문학형식 16
            comboBox4.Items.AddRange(tag008.combo4);

            // 전기 5
            comboBox5.Items.AddRange(tag008.combo5);

            // 언어 36
            comboBox6.Items.AddRange(tag008.combo6);

            richTextBox1.Text = split_Marc(Marc[0]);
            Create_008(Marc[0]);
            st.Color_change("▼", richTextBox1);
            st.Color_change("▲", richTextBox1);

            tb_Mcode.Text = Marc[1];
            tb_num.Text = Marc[2];
            idx = Marc[3];

            richTextBox1.Select(0, richTextBox1.Text.Length);
            richTextBox1.SelectionBackColor = Color.Transparent;
            richTextBox1.ScrollToCaret();
            input_picture(Marc[4]);

            SetHistory();
        }

        /// <summary>
        /// 작성자, 작성시각 표출해주는 함수.
        /// (22.02.07 추가) 비고1, 비고2 추가로 표출
        /// </summary>
        public void SetHistory()
        {
            if (mp != null)
            {
                string cmd = string.Format("SELECT `user`, `editDate`, `etc1`, `etc2` FROM `Specs_Marc` WHERE `idx` = \"{0}\"", idx);
                string res = db.DB_Send_CMD_Search(cmd);
                string[] aryResultData = res.Split('|');

                if (aryResultData.Length > 1) {
                    lbl_SaveData.Text = string.Format("[{0}] [{1}]", aryResultData[0], aryResultData[1]);
                    etcBox1.Text = aryResultData[2];
                    etcBox2.Text = aryResultData[3];
                }
            }
            else if (si != null)
            {
                string cmd = string.Format("SELECT `user`, `date`, `비고1`, `비고2` FROM `Marc` WHERE `idx` = \"{0}\"", tb_Mcode.Text);
                string res = db.DB_Send_CMD_Search(cmd);
                string[] aryResultData = res.Split('|');

                if (aryResultData.Length > 1) {
                    lbl_SaveData.Text = string.Format("[{0}] [{1}]", aryResultData[0], aryResultData[1]);
                    etcBox1.Text = aryResultData[2];
                    etcBox2.Text = aryResultData[3];
                }
            }

        }

        /// <summary>
        /// 시작전 저자기호 세팅작업. 필요한 데이터들을 각각의 박스들에 집어넣음.
        /// </summary>
        /// <param name="Symbol_Type">저자기호 배열
        /// 0:FirstAuthor 1:authorType 2:FirstBook 3:divType 4:divNum </param>
        public void SetSymbolType(string[] Symbol_Type)
        {
            #region 저자기호
            AuthorSymbol.Symbol sb = new AuthorSymbol.Symbol();

            cb_FirstAuthor.Items.AddRange(sb.authorBook);
            cb_authorTypeK.Items.AddRange(sb.authorType);
            cb_authorTypeE.Items.AddRange(sb.authorType);
            cb_FirstBook.Items.AddRange(sb.authorFirst);

            cb_FirstAuthor.SelectedItem = Symbol_Type[0];
            cb_authorTypeK.SelectedItem = Symbol_Type[1];
            cb_authorTypeE.SelectedItem = Symbol_Type[2];
            cb_FirstBook.SelectedItem = Symbol_Type[3];
            #endregion

            #region 분류기호
            string[] divType = { "KDC", "DDC" };
            cb_divType.Items.AddRange(divType);

            string[] divNum = { "4", "5", "6" };
            cb_divNum.Items.AddRange(divNum);

            cb_divType.SelectedItem = Symbol_Type[3];
            cb_divNum.SelectedItem = Symbol_Type[4];
            #endregion
        }

        #region Init_Sub
        void input_picture(string isbn)
        {
            try
            {
                string isbn3 = isbn.Substring(isbn.Length - 3, 3);
                string tFilePath = string.Format("https://contents.kyobobook.co.kr/sih/fit-in/458x0/pdt/{0}.jpg", isbn);
                pictureBox1.ImageLocation = tFilePath;
                //pictureBox1.ImageLocation = "http://image.kyobobook.co.kr/images/book/xlarge/" + isbn3 + "/x" + isbn + ".jpg";
            }
            catch { }
        }

        /// <summary>
        /// 008 각각의 박스에 대입하는 함수
        /// </summary>
        /// <returns></returns>
        public void Create_008(string pMarc)
        {
            string data = text008.Text;
           
            //string data = pMarc;
            if (data == "" || data == null) { return; }
            if (data.Length <40) data=data.PadRight(40,' ');
            string[] Tag008 = {
                "", "", "", "", "",
                "", "", "", "", "",
                "", "", "", "", "",
                "", "", "", "", ""
            };
            /* 입력일자 발행년유형 발행년1 발행년2 발행국 
             * 삽화표시 이용대상자수준 개별자료형태 내용형식1 내용형식2 
             * 한국대학부호 수정레코드 회의간행물 기념논문집 색인 
             * 목록전거 문학형식 전기 언어 한국정부기관부호 */

            // 사전에 선언된 string배열에 맞는 데이터를 배정.
            int tmp_years = Convert.ToInt32(data.Substring(0, 2));
            int now_years = Convert.ToInt32(DateTime.Now.ToString("yy"));
            string century = "20";

            if (tmp_years > now_years)
                century = "19";

            Tag008[0] = century
                      + data.Substring(0, 6);           // 입력일자 (00-05)
            Tag008[1] = data.Substring(6, 1);           // 발행년유형 (6)
            Tag008[2] = data.Substring(7, 4);           // 발행년1 (07-10)
            Tag008[3] = data.Substring(11, 4);          // 발행년2 (11-14)
            Tag008[4] = data.Substring(15, 3);          // 발행국 (15-17)

            Tag008[5] = data.Substring(18, 4);          // 삽화표시 (18-21)
            Tag008[6] = data.Substring(22, 1);          // 이용대상자수준 (22) v
            Tag008[7] = data.Substring(23, 1);          // 개별자료형태 (23) v
            Tag008[8] = data.Substring(24, 1);          // 내용형식1 (24) v
            Tag008[9] = data.Substring(25, 1);          // 내용형식2 (25) v

            Tag008[10] = data.Substring(26, 2);         // 한국대학부호 (26-27)
            Tag008[11] = data.Substring(28, 1);         // 수정레코드 (28)
            Tag008[12] = data.Substring(29, 1);         // 회의간행물 (29) c
            Tag008[13] = data.Substring(30, 1);         // 기념논문집 (30) c
            Tag008[14] = data.Substring(31, 1);         // 색인 (31)

            Tag008[15] = data.Substring(32, 1);         // 목록전거 (32)
            Tag008[16] = data.Substring(33, 1);         // 문학형식 (33) v
            Tag008[17] = data.Substring(34, 1);         // 전기 (34) v
            Tag008[18] = data.Substring(35, 3);         // 언어 (35-37) v
            
            Tag008[19] = data.Substring(38, 2);         // 한국정부기관부호 (38-39)
            int tLength = data.Length;
            // 배열에 들어간 데이터로 콤보박스를 꾸미는 작업.
            int year = Convert.ToInt32(Tag008[0].Substring(0, 4));
            int month = Convert.ToInt32(Tag008[0].Substring(4, 2));
            int day = Convert.ToInt32(Tag008[0].Substring(6, 2));
            input_date.Value = new DateTime(year, month, day);      // 입력일자

            comboBox1.SelectedIndex = tag008.User_008(Tag008[6]);   // 이용대상자수준
            comboBox2.SelectedIndex = tag008.DataType_008(Tag008[7]);   // 개별자료형태
            comboBox3.SelectedIndex = tag008.Format_008(Tag008[8]);   // 내용형식1
            comboBox7.SelectedIndex = tag008.Format_008(Tag008[9]);   // 내용형식2
            comboBox4.SelectedIndex = tag008.Literary_008(Tag008[16]);   // 문학형식
            comboBox5.SelectedIndex = tag008.Biography_008(Tag008[17]);   // 전기
            comboBox6.SelectedIndex = tag008.Language_008(Tag008[18]);   // 언어


            checkBox1.Checked = tag008.CheckBox_008(Tag008[12]);    // 회의간행물
            checkBox2.Checked = tag008.CheckBox_008(Tag008[13]);    // 기념논문집

            col008res.Text = Tag008[10];
            gov008res.Text = Tag008[19];

            return;
        }

        /// <summary>
        /// 마크데이터가 있는지 확인하고 메모장으로 출력
        /// </summary>
        /// <param name="row">마크 데이터</param>
        /// <returns></returns>
        string split_Marc(string Marc_data)
        {
            if (Marc_data.Length < 3) return "";

            string result = string.Empty;

            List<string> TagNum = new List<string>();   // 태그번호
            List<string> field = new List<string>();    // 가변길이필드 저장

            // 특수기호 육안으로 확인하기 쉽게 변환
            Marc_data = Marc_data.Replace("", "▼");
            Marc_data = Marc_data.Replace("", "▲");
            Marc_data = Marc_data.Replace("￦", "\\");
            // string leader = Marc_data.Substring(0, 24);

            int startidx = 0;
            string[] data = Marc_data.Substring(24).Split('▲'); // 리더부를 제외한 디렉터리, 가변길이필드 저장

            // List에 필요한 데이터 집어넣는 작업.
            for (int a = 1; a < data.Length - 1; a++)
            {
                TagNum.Add(data[0].Substring(startidx, 3));
                startidx += 12;
                field.Add(data[a] + "▲");
            }

            // List에 들어간 데이터를 메모장에 출력시키는 작업.
            for (int a = 0; a < TagNum.Count; a++)
            {
                string res = TagNum[a];
                if (TagNum[a] == "008")
                {
                    text008.Text = field[a].Replace("▲", "");
                    continue;
                }
                else { }
                if (field[a].IndexOf("▼") == -1)
                {
                    res += "\t  \t" + field[a];
                }
                else
                {
                    string temp = field[a].Insert(2, "\t");
                    res += "\t" + temp;
                }
                result += res + "\n";
            }
            return result;
        }
        #endregion

        private void checkBox_CheckedChanged(object sender, EventArgs e)
        {

            string name = ((CheckBox)sender).Name;
            if (((CheckBox)sender).Checked == true)
            {
                switch (name)
                {
                    case "checkBox1":
                        ((CheckBox)sender).Text = "회의간행물o";
                        break;
                    case "checkBox2":
                        ((CheckBox)sender).Text = "기념논문집o";
                        break;
                }
            }
            else if (((CheckBox)sender).Checked == false)
            {
                switch (name)
                {
                    case "checkBox1":
                        ((CheckBox)sender).Text = "회의간행물x";
                        break;
                    case "checkBox2":
                        ((CheckBox)sender).Text = "기념논문집x";
                        break;
                }
            }
            switch (name)
            {
                case "checkBox1":
                    Publication(checkBox1.Checked, 29);
                    break;
                case "checkBox2":
                    Publication(checkBox2.Checked, 30);
                    break;
            }
        }
        #region checkBox_Checked_Sub
        void Publication(bool check, int idx)
        {
            if (text008.Text == "") { return; }
            char[] ArrayChar = text008.Text.ToCharArray();
            if (!check) { ArrayChar[idx] = '0'; }
            else if (check) { ArrayChar[idx] = '1'; }
            text008.Text = new string(ArrayChar);
        }
        #endregion

        private void col008res_TextChanged(object sender, EventArgs e)
        {
            if (text008.Text.Length < 3) { return; }
            string text = text008.Text;
            string iText = ((Label)sender).Text;
            if (iText.Length < 1) { return; }
            char[] textArray = text.ToCharArray();
            char[] inputArray = iText.ToCharArray();

            switch (((Label)sender).Name)
            {
                case "col008res":
                    textArray[26] = inputArray[0];
                    textArray[27] = inputArray[1];
                    break;
                case "gov008res":
                    textArray[38] = inputArray[0];
                    textArray[39] = inputArray[1];
                    break;
            }
            text = new string(textArray);
            text008.Text = text;
        }

        private void text008col_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                string tbName = ((TextBox)sender).Name;
                string call = ((TextBox)sender).Text;
                Helper008 helper = new Helper008(this);
                helper.Who_Call(tbName, call);
                helper.Show();
            }
        }

        private void comboBox6_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (text008.Text.Length < 3) { return; }

            string text = text008.Text;
            string comboName = ((ComboBox)sender).Name;
            int comboIdx = ((ComboBox)sender).SelectedIndex;

            text008.Text = tag008.Combo_Change(text, comboName, comboIdx);
        }

        private void btn_Close_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btn_Save_Click(object sender, EventArgs e)
        {
            string tData = richTextBox1.Text;
            tData = tData.Insert(0, string.Format("{0}\t{1}\t{2}▲\n", "008", "  ", text008.Text));
            string oriMarc = st.made_Ori_marc(tData);

            if (mp != null)
            {
                Save_mp(oriMarc);
                Refresh_mp_Marc();
            }

            if (si != null)
            {
                Save_si(oriMarc);
                Refresh_si_Marc();
            }
        }
        private void Refresh_mp_Marc()
        {
            string[] marc = {
                mp.dataGridView1.Rows[row].Cells["marc"].Value.ToString(),
                mp.dataGridView1.Rows[row].Cells["midx"].Value.ToString(),
                mp.dataGridView1.Rows[row].Cells["num"].Value.ToString(),
                mp.dataGridView1.Rows[row].Cells["idx"].Value.ToString(),
                mp.dataGridView1.Rows[row].Cells["ISBN"].Value.ToString()
            };
            //string[] Symbol_Type = {
            //    cb_FirstAuthor.Text, cb_authorTypeK.Text, cb_authorTypeE.Text, cb_FirstBook.Text, cb_divType.Text, cb_divNum.Text
            //};

            Init(marc);
        }
        private void Refresh_si_Marc()
        {
            string[] marc = {
                si.dataGridView1.Rows[row].Cells["Marc"].Value.ToString(),
                si.dataGridView1.Rows[row].Cells["idx"].Value.ToString(),
                "",
                "",
                si.dataGridView1.Rows[row].Cells["ISBN"].Value.ToString()
            };
            //string[] Symbol_Type = {
            //    cb_FirstAuthor.Text, cb_authorTypeK.Text, cb_FirstBook.Text, cb_divType.Text, cb_divNum.Text
            //};

            Init(marc);
        }
        #region Save_Sub

        private void Save_mp(string oriMarc)
        {
            // 등록번호 분류기호 저자기호 볼륨 복본
            // 별치     총서명  총서번호  저자 출판사
            // 정가    ISBN
            string[] Search_Tag = {
                "049l", "090a", "090b", "049v", "049c",
                "049f", "440a", "440v", "245d", "260b",
                "950b", "020a"
            };
            string[] SearchBookTag = st.Take_Tag(oriMarc, Search_Tag);

            string etc1 = etcBox1.Text;
            string etc2 = etcBox2.Text;
            string tag008 = text008.Text;

            // 도서명 (본서명 = 대등서명 : 부서명)
            string[] BookTag = { "245a", "245x", "245b" };
            string[] BookNameTag = st.Take_Tag(oriMarc, BookTag);
            string BookName = mk_BookName(BookNameTag);

            string Table = "Specs_Marc";

            string[] Search_Col = { "idx" };
            string[] Search_data = { idx };

            string[] Update_Col = {
                "marc", "book_name", "etc1", "etc2",
                "r_num", "class_symbol", "author_symbol", "prefix", "s_book_name1",
                "s_book_num1", "author", "book_comp", "price", "ISBN", "tag008"
            };
            string[] Update_data = {
                oriMarc, BookName, etc1, etc2,
                SearchBookTag[0], SearchBookTag[1], SearchBookTag[2], SearchBookTag[5], SearchBookTag[6],
                SearchBookTag[7], SearchBookTag[8], SearchBookTag[9], SearchBookTag[10], SearchBookTag[11], tag008
            };

            string cmd = db.More_Update(Table, Update_Col, Update_data, Search_Col, Search_data);

            Helper_DB.ExcuteNonQuery(cmd);
            InputBookData(SearchBookTag);

            UTIL.MsgI("저장되었습니다!");

            mp.dataGridView1.Rows[row].Cells["book_name"].Value = BookName;
            mp.dataGridView1.Rows[row].Cells["marc"].Value = oriMarc;
        }

        private void Save_si(string oriMarc)
        {
            string today = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            string user = UserName;
            string MarcIndex = tb_Mcode.Text;

            string etc1 = etcBox1.Text;
            string etc2 = etcBox2.Text;
            string grade = cb_grade.SelectedIndex.ToString();

            string Table = "Marc";

            string[] Search_Col = { "idx" };
            string[] Search_data = { MarcIndex };

            string[] Update_Col = {
                "marc", "marc_chk","marc1", "marc_chk2", "date", "user",
                "비고1", "비고2", "grade"
            };
            string[] Update_data = {
                oriMarc, "1",mOldMarc, "0", today, user,
                etc1, etc2, grade
            };

            //string res = Sub_marc_chk(MarcIndex);
            //switch (res)
            //{
            //    case "0":
            //        Update_Col[0] = "marc1";
            //        Update_Col[1] = "marc_chk1";
            //        Update_Col[2] = "marc_chk";
            //        break;
            //    case "1":
            //        Update_Col[0] = "marc2";
            //        Update_Col[1] = "marc_chk2";
            //        Update_Col[2] = "marc_chk1";
            //        break;
            //    case "2":    
            //        Update_Col[0] = "marc";
            //        Update_Col[1] = "marc_chk";
            //        Update_Col[2] = "marc_chk2";
            //        break;
            //    default:
            //        break;
            //}

            string Ucmd = db.More_Update(Table, Update_Col, Update_data, Search_Col, Search_data);
            Helper_DB.ExcuteNonQuery(Ucmd);

            UTIL.MsgI("저장되었습니다!");

            si.dataGridView1.Rows[row].Cells["Marc"].Value = oriMarc;
            si.dataGridView1.Rows[row].Cells["User"].Value = user;
            si.dataGridView1.Rows[row].Cells["date"].Value = today;
        }

        private string Sub_marc_chk(string idx)
        {
            string Area = "`marc_chk`, `marc_chk1`, `marc_chk2`";
            string cmd = db.DB_Select_Search(Area, "Marc", "idx", idx);
            string db_res = db.DB_Send_CMD_Search(cmd);
            string[] chk_ary = db_res.Split('|');

            for (int a = 0; a < chk_ary.Length; a++)
            {
                if (chk_ary[a] == "1")
                {
                    return a.ToString();
                }
            }
            return "0";
        }

        /// <summary>
        /// 추출해낸 태그값을 Grid에 적용
        /// </summary>
        /// <param name="SearchTag">
        /// 등록번호 분류기호 저자기호 볼륨 복본<br/>
        /// 별치     총서명  총서번호  저자 출판사<br/>
        /// 정가     ISBN
        /// </param>
        private void InputBookData(string[] SearchTag)
        {
            mp.dataGridView1.Rows[row].Cells["reg_num"     ].Value = SearchTag[0];
            mp.dataGridView1.Rows[row].Cells["class_code"  ].Value = SearchTag[1];
            mp.dataGridView1.Rows[row].Cells["author_code" ].Value = SearchTag[2];
            mp.dataGridView1.Rows[row].Cells["volume"      ].Value = SearchTag[3];
            mp.dataGridView1.Rows[row].Cells["copy"        ].Value = SearchTag[4];
            mp.dataGridView1.Rows[row].Cells["prefix"      ].Value = SearchTag[5];
            mp.dataGridView1.Rows[row].Cells["s_book_name1"].Value = SearchTag[6];
            mp.dataGridView1.Rows[row].Cells["s_book_num1" ].Value = SearchTag[7];
            mp.dataGridView1.Rows[row].Cells["author"      ].Value = SearchTag[8];
            mp.dataGridView1.Rows[row].Cells["book_comp"   ].Value = SearchTag[9];
            mp.dataGridView1.Rows[row].Cells["price"       ].Value = SearchTag[10];
            mp.dataGridView1.Rows[row].Cells["ISBN"        ].Value = SearchTag[11];
        }

        /// <summary>
        /// 도서명 이어붙히기
        /// <para>
        /// 본서명 = 대등서명 : 부서명 . 권차 , 권차명<br/>
        /// 245a = 245x : 245b . 245n , 245p
        /// </para>
        /// </summary>
        /// <param name="book_name">
        /// 0: 245a  1: 245x  2: 245b  3: 245n  4: 245p<br/>
        /// 0: 도서명  1: 대동서명  2: 부서명  3: 권차  4: 권차명<br/>
        /// </param>
        /// <returns>이어붙혀진 도서명</returns>
        private string mk_BookName(string[] book_name)
        {
            string a245 = book_name[0];     // 도서명
            string x245 = book_name[1];     // 대동서명
            string b245 = book_name[2];     // 부서명

            string result = a245;

            if (x245 != "")
                result += " = " + x245;

            if (b245 != "")
                result += " : " + b245;

            return result;
        }
        #endregion

        private void btn_Back_Click(object sender, EventArgs e)
        {
            if (row <= 0)
                return;
            else
                row--;

            Btn_FrontAndBack_Sub();
        }

        private void btn_Front_Click(object sender, EventArgs e)
        {
            int mprow = 0;
            if (mp != null)
                mprow = mp.dataGridView1.Rows.Count;
            else if(si!=null)
                mprow = si.dataGridView1.Rows.Count;

            if (row < mprow - 1)
                row++;
            else
                return;

            Btn_FrontAndBack_Sub();
        }

        #region btn_FrontAndBack_Sub

        private void Btn_FrontAndBack_Sub()
        {
            if (mp != null)
                FrontBack_mp();

            else if (si != null)
                FrontBack_si();
        }

        private void FrontBack_mp()
        {
            string[] marc = {
                mp.dataGridView1.Rows[row].Cells["marc"].Value.ToString(),
                mp.dataGridView1.Rows[row].Cells["midx"].Value.ToString(),
                mp.dataGridView1.Rows[row].Cells["num"].Value.ToString(),
                mp.dataGridView1.Rows[row].Cells["idx"].Value.ToString(),
                mp.dataGridView1.Rows[row].Cells["ISBN"].Value.ToString()
            };
            string[] Symbol_Type = {
                cb_FirstAuthor.Text, cb_authorTypeK.Text, cb_authorTypeE.Text, cb_FirstBook.Text, cb_divType.Text, cb_divNum.Text
            };

            Init(marc);
            SetSymbolType(Symbol_Type);
        }

        private void FrontBack_si()
        {
            string[] Marc = {
                si.dataGridView1.Rows[row].Cells["Marc"].Value.ToString(),
                si.dataGridView1.Rows[row].Cells["idx"].Value.ToString(),
                "",
                "",
                si.dataGridView1.Rows[row].Cells["ISBN"].Value.ToString()
            };

            Init(Marc);
        }
        #endregion

        private void Marc_Plan_Sub_MarcEdit_Load(object sender, EventArgs e)
        {
            this.ActiveControl = richTextBox1;
        }

        private void btn_EditNum_Click(object sender, EventArgs e)
        {
            string Table = "Specs_Marc";
            string[] Search_col = { "idx" };
            string[] Search_Data = { idx };
            string[] Update_col = { "midx", "num" };
            string[] Update_Data = { tb_Mcode.Text, tb_num.Text };
            string cmd = db.More_Update(Table, Update_col, Update_Data, Search_col, Search_Data);
            Helper_DB.ExcuteNonQuery(cmd);

            UTIL.MsgI("적용되었습니다!");
        }

        private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F9 && !mOpenOldMarc)
                btn_Save_Click(null, null);

            if (e.KeyCode == Keys.F11 && !mOpenOldMarc)
                btn_Back_Click(null, null);

            if (e.KeyCode == Keys.F12 && !mOpenOldMarc)
                btn_Front_Click(null, null);

            if (e.KeyCode == Keys.Escape)
                btn_Close_Click(null, null);

            if (e.KeyCode == Keys.F7 && !mOpenOldMarc) {
                string Tag090 = Sample_090();
                Tag_Create("090", Tag090);
            }

        }
        #region KeyDown_Sub
        /// <summary>
        /// 저자기호와 분류기호를 반환하는 코드<br/>
        /// 현재 저자기호만 가능
        /// </summary>
        /// <returns></returns>
        private string Sample_090()
        {
            string Marc = richTextBox1.Text;

            bool[] isType = { false, false };
            if (cb_FirstAuthor.SelectedIndex == 0)
                isType[0] = true;
            if (cb_FirstBook.SelectedIndex == 0)
                isType[1] = true;

            string authorTypeK = cb_authorTypeK.SelectedItem.ToString();
            string authorTypeE = cb_authorTypeE.SelectedItem.ToString();

            string ClassSymbol = string.Empty;
            string Author = string.Empty;
            string BookName = string.Empty;

            #region 100 작가(Author) / 245 도서명(BookName) 태그 가져오는 코드 

            string AuthorTagNum = string.Empty;
            string[] splitMarc = Marc.Split('\n');

            // 100, 110, 111 태그의 저자명 구해오는 반복문
            for (int a = 0; a < splitMarc.Length - 1; a++)
            {
                if (splitMarc[a].Substring(0, 3) == "100")
                {
                    AuthorTagNum = "100";
                    break;
                }
                if (splitMarc[a].Substring(0, 3) == "110")
                {
                    AuthorTagNum = "110";
                    break;
                }
                if (splitMarc[a].Substring(0, 3) == "111")
                {
                    AuthorTagNum = "111";
                    break;
                }
            }

            for (int a = 0; a < splitMarc.Length - 1; a++)
            {
                if (splitMarc[a].Substring(0, 3) == "056")
                {
                    int start = splitMarc[a].IndexOf("▼a") + 2;
                    int end = splitMarc[a].IndexOf("▼", start);
                    if (end < 0)
                        ClassSymbol = splitMarc[a].Substring(start).Replace("▲", "");
                    else
                        ClassSymbol = splitMarc[a].Substring(start, end - start);
                }
                if (splitMarc[a].Substring(0, 3) == AuthorTagNum)
                {
                    int start = splitMarc[a].IndexOf("▼a") + 2;
                    int end = splitMarc[a].IndexOf("▼", start);
                    if (end < 0)
                        Author = splitMarc[a].Substring(start).Replace("▲", "");
                    else
                        Author = splitMarc[a].Substring(start, end - start);
                }
                if (splitMarc[a].Substring(0, 3) == "245")
                {
                    int start = splitMarc[a].IndexOf("▼a") + 2;
                    int end = splitMarc[a].IndexOf("▼", start);
                    if (end < 0)
                        BookName = splitMarc[a].Substring(start).Replace("▲", "");
                    else
                        BookName = splitMarc[a].Substring(start, end - start);
                }
            }
            BookName = st.RemoveWordInBracket(BookName);
            #endregion

            AuthorSymbol.Symbol sb = new AuthorSymbol.Symbol();

            string AuthorSymbol = sb.SymbolAuthor(Author, BookName, authorTypeK, authorTypeE,  isType);
            lbl_AuthorSymbol.Text = AuthorSymbol;
            lbl_ClassSymbol.Text = ClassSymbol;

            ClassSymbol = "▼a" + ClassSymbol;
            AuthorSymbol = "▼b" + AuthorSymbol;

            string result = string.Format("\t{0}\t{1}{2}▲", "  ", ClassSymbol, AuthorSymbol);

            return result;
        }

        /// <summary>
        /// 마크에 090 태그가 삽입되어야함.
        /// <para>
        /// 090a 분류기호<br/>
        /// 090b 도서기호
        /// </para>
        /// 지시기호 따로 정의되지 않음. (빈칸으로 정의)<br/>
        /// ex. 090  ▼a813.6▼b홍214ㄱ▲
        /// <param name="tar">태그 명 (숫자 3자리만!)</param>
        /// </summary>
        private void Tag_Create(string tar,string Content)
        {
            int Itar = Convert.ToInt32(tar);
            string marc = richTextBox1.Text;
            List<string> target = marc.Split('\n').ToList();

            bool chk = true;
            int count = -1;

            for (int a = 0; a < target.Count - 1; a++)
            {
                string[] tmp = target[a].Split('\t');
                string tag = tmp[0];
                int tag_num = Convert.ToInt32(tag);
                if (tag_num == Itar) {
                    chk = false;
                }
                if (tag_num > Itar && chk)
                {
                    count = a;
                    chk = false;
                }
            }
            if (count > 0)
                target.Insert(count, string.Format("{0}{1}", tar, Content)); //text008.Text));
            richTextBox1.Text = string.Join("\n", target.ToArray());
            return;
        }
        #endregion

        private void cb_divType_SelectedIndexChanged(object sender, EventArgs e)
        {
            cb_divNum.Items.Clear();

            string value = cb_divType.SelectedItem.ToString();
            if (value == "KDC")
            {
                string[] data = { "4", "5", "6" };
                cb_divNum.Items.AddRange(data);
            }
            else
            {
                string[] data = { "21", "22", "23" };
                cb_divNum.Items.AddRange(data);
            }
        }
    }
}
