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;

namespace ISBN_Check_test
{
    public partial class Form2 : Form
    {
        Form1 f1;
        public int row;
        public string Call_API = string.Empty;
        int rowidx;
        public Form2(Form1 _f1)
        {
            InitializeComponent();
            f1 = _f1;
        }
        private void Form2_Load(object sender, EventArgs e)
        {
            dataGridView1.Focus();

            Sort_data(f1.dataGridView1);

            // 비슷한거 색깔표시
            same_chk();
        }
        private void Sort_data(DataGridView f1GridView)
        {
            tb_book_name.Text = f1GridView.Rows[row].Cells["book_name"].Value.ToString();
            tb_author.Text = f1GridView.Rows[row].Cells["author"].Value.ToString();
            tb_book_comp.Text = f1GridView.Rows[row].Cells["book_comp"].Value.ToString();

            if (f1GridView.Rows[row].Cells["price"].Value != null)
                tb_price.Text = f1GridView.Rows[row].Cells["price"].Value.ToString();
             
            else { tb_price.Text = ""; }

            var data = (string[])f1GridView.Rows[row].Cells["Column1"].Value;
            inputGrid(data);
        }
        private void inputGrid(string[] tmp)
        {
            dataGridView1.Rows.Clear();

            // 도서명 / 저자 / 출판사 / isbn / 출간일 / 카테고리 / 품절여부
            //string[] tmp = data.Split('|');
            string[] grid = { "", "", "", "", "", "", "", "" };

            for (int a = 0; a < tmp.Length; a++)
            {
                if (a % 8 == 0) { grid[0] = tmp[a]; }
                if (a % 8 == 1) { grid[1] = tmp[a]; }
                if (a % 8 == 2) { grid[2] = tmp[a]; }
                if (a % 8 == 3) { grid[3] = tmp[a]; }
                if (a % 8 == 4) { grid[4] = tmp[a]; }
                if (a % 8 == 5) { grid[5] = change_Date_type(tmp[a]); }
                if (a % 8 == 6) { grid[6] = Aladin_CategorySort(tmp[a]); }
                if (a % 8 == 7) { grid[7] = tmp[a]; dataGridView1.Rows.Add(grid); }
            }
        }
        private string change_Date_type(string date) 
        {
            if (Call_API == "알라딘")
            {
                try
                {
                    return String.Format("{0:yyyy/MM/dd}",
                    DateTime.Parse(date.Remove(date.IndexOf(" G"))));
                }
                catch { return date; }
            }
            if (Call_API == "네이버")
                try
                {
                    return DateTime.ParseExact(date, "yyyyMMdd", null).ToString("yyyy-MM-dd");
                }
                catch { return ""; }
            else
                return date;
        }
        private void same_chk()
        {
            // 도서명, 저자, 출판사, ISBN,  정가
            string[] ori_data = { tb_book_name.Text, 
                                  tb_author.Text, 
                                  tb_book_comp.Text, 
                                  tb_isbn.Text, 
                                  tb_price.Text.Replace(",","") };

            for(int a= 0; a < dataGridView1.Rows.Count; a++)
            {
                int chk_idx = 0;

                if(dataGridView1.Rows[a].Cells["book_name"].Value.ToString() == ori_data[0]) {
                    chk_idx++;
                }
                if(dataGridView1.Rows[a].Cells["author"].Value.ToString().Contains(ori_data[1]) == true) {
                    chk_idx++;
                }
                if(dataGridView1.Rows[a].Cells["book_comp"].Value.ToString() == ori_data[2]) {
                    chk_idx++;
                }
                if (chk_idx >= 2) {
                    int pay = Convert.ToInt32(dataGridView1.Rows[a].Cells["price"].Value.ToString());
                    int price = 0;
                    if (ori_data[4] != "")
                        price = Convert.ToInt32(ori_data[4]);

                    if (price - 5000 <= pay && pay <= price + 5000)
                        dataGridView1.Rows[a].DefaultCellStyle.BackColor = Color.Yellow;

                    else 
                        dataGridView1.Rows[a].DefaultCellStyle.BackColor = Color.LightGray;
                }
            }
        }
        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if(e != null) { rowidx = e.RowIndex; }
            string book_name = dataGridView1.Rows[rowidx].Cells["book_name"].Value.ToString();
            string author = dataGridView1.Rows[rowidx].Cells["author"].Value.ToString();
            string book_comp = dataGridView1.Rows[rowidx].Cells["book_comp"].Value.ToString();
            string isbn = dataGridView1.Rows[rowidx].Cells["isbn"].Value.ToString();
            string price = dataGridView1.Rows[rowidx].Cells["price"].Value.ToString();
            string Date = dataGridView1.Rows[rowidx].Cells["pubDate"].Value.ToString();
            string category = dataGridView1.Rows[rowidx].Cells["category"].Value.ToString();
            string sold = dataGridView1.Rows[rowidx].Cells["sold_out"].Value.ToString();

            f1.dataGridView1.Rows[row].Cells["book_name"].Value = book_name;
            f1.dataGridView1.Rows[row].Cells["author"].Value = author;
            f1.dataGridView1.Rows[row].Cells["book_comp"].Value = book_comp;
            f1.dataGridView1.Rows[row].Cells["isbn"].Value = isbn;
            f1.dataGridView1.Rows[row].Cells["price2"].Value = price;
            f1.dataGridView1.Rows[row].Cells["pubDate"].Value = Date;
            f1.dataGridView1.Rows[row].Cells["category"].Value = category;
            f1.dataGridView1.Rows[row].Cells["sold_out"].Value = sold;

            f1.dataGridView1.Rows[row].DefaultCellStyle.BackColor = Color.Yellow;

            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyCode == Keys.Enter) { dataGridView1_CellDoubleClick(null, null); }
            if (e.KeyCode == Keys.Up) {
                rowidx--;
                if (rowidx < 0) 
                    rowidx = 0;
            }
            if (e.KeyCode == Keys.Down) { 
                rowidx++;
                if (rowidx > dataGridView1.Rows.Count - 1)
                    rowidx = dataGridView1.Rows.Count - 1;
            }
            if (e.KeyCode == Keys.Escape) {
                this.Close();
            }
        }
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            rowidx = e.RowIndex;
        }

        /// <summary>
        /// 재검색
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_ReSearch_Click(object sender, EventArgs e)
        {
            string[] param = { "title", "author", "publisher", "isbn13", "priceStandard",
                               "pubDate", "categoryName", "stockStatus", };
            API api = new API();

            string type = "Title";
            string query = tb_book_name.Text;

            var aladin = api.Aladin(query, type, param);
            if (aladin.Any()==false) return;

            inputGrid(aladin);
        }

        string Aladin_CategorySort(string insert)
        {
            try
            {
                // 도서 분류 필요한 데이터로 재정리
                int top = insert.IndexOf('>');
                int mid = insert.IndexOf('>', top + 1);
                int bot = insert.IndexOf('>', mid + 1);
                if (bot < 0) { insert = insert.Substring(top + 1); }
                else { insert = insert.Substring(top + 1, bot - top - 1); }
                return insert;
            }
            catch
            {
                return insert;
            }
        }

        private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            Skill_Grid sg = new Skill_Grid();
            sg.Print_Grid_Num(sender, e);
        }
    }
}
