using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.IO;

using INT_PT002.Forms;
using INT_PT002.DataStore;
using INT_PT002.DialogForms;

namespace INT_PT002.Controls
{
    public partial class ControlMenuLogAlarm : UserControl
    {
        #region Field
        private FormMenu m_ParentForm;

        private Define.E_DataType SelecteDataType;
        private List<DataBackupYear> ListAlarmFile;
        #endregion

        #region Constructor
        public ControlMenuLogAlarm(FormMenu parent)
        {
            InitializeComponent();

            this.ParentForm = parent;

            this.Initialize();
            this.DefaultSetting();
        }
        #endregion

        #region Property
        public FormMenu ParentForm
        {
            get { return this.m_ParentForm; }
            private set { this.m_ParentForm = value; }
        }
        #endregion

        #region Method
        private void Initialize()
        {
            this.smartGroupBox1.Text = "Log > Alarm";
        }
        private void DefaultSetting()
        {
            this.SelecteDataType = Define.E_DataType.None;

            this.ListAlarmFile = new List<DataBackupYear>();
        }

        private void UpdateDisplayFile()
        {
            int fileCount = 0;
            //TreeNode node;
            List<string> years = new List<string>();
            List<string> months = new List<string>();
            List<string> days = new List<string>();

            this.treeViewLogAlarm.Nodes.Clear();
            this.ListAlarmFile.Clear();

            DirectoryInfo dir = new DirectoryInfo(this.ParentForm.ParentForm.PathDataAlarmFolder);
            List<string> fileNames = new List<string>();

            // 폴더 체크
            if (dir.Exists == false)
                dir.Create();

            // year 폴더 가져오기
            DirectoryInfo[] yearDirectorys = dir.GetDirectories();
            // year 폴더 정렬 
            years = this.ParentForm.DirectorySort(yearDirectorys);

            // Alarm File 리스트 생성
            if (years.Count != 0)
            {
                // Year
                foreach (string year in years)
                {
                    DataBackupYear y = new DataBackupYear(year);
                    DirectoryInfo monthDir = new DirectoryInfo(string.Format("{0}{1}", this.ParentForm.ParentForm.PathDataAlarmFolder, year));
                    DirectoryInfo[] monthDirectorys = monthDir.GetDirectories();

                    months = this.ParentForm.DirectorySort(monthDirectorys);

                    if (months.Count != 0)
                    {
                        // Month
                        foreach (string month in months)
                        {
                            DirectoryInfo dayDir = new DirectoryInfo(string.Format("{0}{1}\\{2}", this.ParentForm.ParentForm.PathDataAlarmFolder, year, month));
                            FileInfo[] dayFiles = dayDir.GetFiles();

                            days = this.DayAlarmDirectorySort(dayFiles);

                            DataBackupMonth m = new DataBackupMonth(month);
                            m.Days = days;

                            y.Months.Add(m);
                        }

                        this.ListAlarmFile.Add(y);
                    }
                    else
                    {
                        this.ListAlarmFile.Add(y);
                    }
                }

                // node 생성
                for (int i = 0; i < this.ListAlarmFile.Count; i++)
                {
                    TreeNode node = new TreeNode(this.ListAlarmFile[i].Year);
                    for (int j = 0; j < this.ListAlarmFile[i].Months.Count; j++)
                    {
                        TreeNode nodeMonth = new TreeNode(this.ListAlarmFile[i].Months[j].Month);

                        for (int k = 0; k < this.ListAlarmFile[i].Months[j].Days.Count; k++)
                        {
                            nodeMonth.Nodes.Add(this.ListAlarmFile[i].Months[j].Days[k]);
                            fileCount++;
                        }
                        node.Nodes.Add(nodeMonth);
                    }
                    this.treeViewLogAlarm.Nodes.Add(node);
                }
            }

            this.labelCount.Text = fileCount.ToString();
        }

        private List<string> DayAlarmDirectorySort(FileInfo[] files)
        {
            List<string> listFile = new List<string>();
            Dictionary<string, int> dirNames = new Dictionary<string, int>();

            #region File List 품번 순서대로 정렬
            foreach (FileInfo file in files)
                dirNames.Add(file.Name, int.Parse(file.Name.Substring(10, 1)));

            var vrList = dirNames.OrderBy(x => x.Value);
            foreach (var v in vrList)
                listFile.Add(v.Key);
            #endregion

            #region File List 날짜 순서대로 정렬
            dirNames = new Dictionary<string, int>();
            foreach (string f in listFile)
                dirNames.Add(f, int.Parse(f.Substring(1, 8)));

            listFile.Clear();
            vrList = dirNames.OrderBy(x => x.Value);
            foreach (var v in vrList)
                listFile.Add(v.Key);
            #endregion

            return listFile;
        }

        public void DisplayRefresh()
        {
            this.ParentForm.ParentForm.CurrentSystemStatus.CurrentDisplay = Define.E_FormStore.FormAlarmList;
            this.ParentForm.ParentForm.SetDisplayMode(Define.E_DisplayMode.Menu);

            this.SelecteDataType = Define.E_DataType.None;

            this.UpdateDisplayFile();
            this.treeViewLogAlarm.ExpandAll();

            if (int.Parse(this.labelCount.Text) == 0)
            {
                DialogFormMessage msg = new DialogFormMessage(36, this.ParentForm.ParentForm.SystemConfig.LANGUAGE);
                msg.ShowDialog();
                return;
            }
        }
        #endregion

        #region Event Handler

        #endregion
    }
}
