using System;
using PKHeX.Core;

namespace PKHeX.WinForms.Controls
{
    public partial class PKMEditor
    {
        private void PopulateFieldsPK5()
        {
            if (Entity is not PK5 pk5)
                throw new FormatException(nameof(Entity));

            LoadMisc1(pk5);
            LoadMisc2(pk5);
            LoadMisc3(pk5);
            LoadMisc4(pk5);
            CB_GroundTile.SelectedValue = pk5.Gen4 ? (int)pk5.GroundTile : 0;
            CB_GroundTile.Visible = Label_GroundTile.Visible = pk5.Gen4;
            CHK_NSparkle.Checked = pk5.NPokémon;

            if (HaX)
                DEV_Ability.SelectedValue = pk5.Ability;
            else if (pk5.HiddenAbility)
                CB_Ability.SelectedIndex = CB_Ability.Items.Count - 1;
            else
                LoadAbility4(pk5);

            LoadPartyStats(pk5);
            UpdateStats();
        }

        private PK5 PreparePK5()
        {
            if (Entity is not PK5 pk5)
                throw new FormatException(nameof(Entity));

            SaveMisc1(pk5);
            SaveMisc2(pk5);
            SaveMisc3(pk5);
            SaveMisc4(pk5);

            pk5.GroundTile = (GroundTileType)WinFormsUtil.GetIndex(CB_GroundTile);
            pk5.NPokémon = CHK_NSparkle.Checked;
            if (!HaX) // specify via extra 0x42 instead
                pk5.HiddenAbility = CB_Ability.SelectedIndex > 1; // not 0 or 1

            SavePartyStats(pk5);
            pk5.FixMoves();
            pk5.RefreshChecksum();
            return pk5;
        }
    }
}
