using System;
using System.Windows.Forms;
using PKHeX.Core;

namespace PKHeX.WinForms
{
    public partial class SAV_SimplePokedex : Form
    {
        private readonly SaveFile Origin;
        private readonly SaveFile SAV;

        public SAV_SimplePokedex(SaveFile sav)
        {
            InitializeComponent();
            WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage);
            SAV = (Origin = sav).Clone();
            seen = new bool[SAV.MaxSpeciesID];
            caught = new bool[SAV.MaxSpeciesID];

            var speciesNames = GameInfo.Strings.specieslist;
            for (int i = 0; i < seen.Length; i++)
            {
                int species = i + 1;
                seen[i] = SAV.GetSeen(species);
                caught[i] = SAV.GetCaught(species);
                CLB_Seen.Items.Add(speciesNames[species]);
                CLB_Caught.Items.Add(speciesNames[species]);
                CLB_Seen.SetItemChecked(i, seen[i]);
                CLB_Caught.SetItemChecked(i, caught[i]);
            }
            initialized = true;
        }

        private readonly bool[] seen;
        private readonly bool[] caught;
        private readonly bool initialized;

        private void B_Save_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < seen.Length; i++)
            {
                int species = i + 1;
                SAV.SetSeen(species, seen[i]);
                SAV.SetCaught(species, caught[i]);
            }
            Origin.CopyChangesFrom(SAV);
            Close();
        }

        private void B_Cancel_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void B_SeenAll_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < SAV.MaxSpeciesID; i++)
                CLB_Seen.SetItemChecked(i, true);
        }

        private void B_SeenNone_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < SAV.MaxSpeciesID; i++)
                CLB_Seen.SetItemChecked(i, false);
        }

        private void B_CaughtAll_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < SAV.MaxSpeciesID; i++)
                CLB_Caught.SetItemChecked(i, true);
        }

        private void B_CaughtNone_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < SAV.MaxSpeciesID; i++)
                CLB_Caught.SetItemChecked(i, false);
        }

        private void CLB_Seen_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            if (!initialized) return;
            seen[e.Index] = e.NewValue == CheckState.Checked;
        }

        private void CLB_Caught_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            if (!initialized) return;
            caught[e.Index] = e.NewValue == CheckState.Checked;
        }
    }
}
