using System;
using UnityEngine;

namespace COM3D2.MeidoPhotoStudio.Plugin
{
    internal class SavePosePane : BasePane
    {
        private MeidoManager meidoManager;
        private Button savePoseButton;
        private TextField poseNameTextField;
        private ComboBox categoryComboBox;
        private string categoryHeader;
        private string nameHeader;

        public SavePosePane(MeidoManager meidoManager)
        {
            Constants.customPoseChange += (s, a) =>
            {
                this.categoryComboBox.SetDropdownItems(Constants.CustomPoseGroupList.ToArray());
            };

            this.meidoManager = meidoManager;

            this.categoryHeader = Translation.Get("posePane", "categoryHeader");
            this.nameHeader = Translation.Get("posePane", "nameHeader");

            this.savePoseButton = new Button(Translation.Get("posePane", "saveButton"));
            this.savePoseButton.ControlEvent += OnSavePose;

            this.categoryComboBox = new ComboBox(Constants.CustomPoseGroupList.ToArray());
            this.poseNameTextField = new TextField();
            this.poseNameTextField.ControlEvent += OnSavePose;
        }

        protected override void ReloadTranslation()
        {
            this.categoryHeader = Translation.Get("posePane", "categoryHeader");
            this.nameHeader = Translation.Get("posePane", "nameHeader");
            this.savePoseButton.Label = Translation.Get("posePane", "saveButton");
        }

        public override void Draw()
        {
            GUI.enabled = this.meidoManager.HasActiveMeido;

            MiscGUI.Header(categoryHeader);
            this.categoryComboBox.Draw(GUILayout.Width(160f));

            MiscGUI.Header(nameHeader);
            GUILayout.BeginHorizontal();
            this.poseNameTextField.Draw(GUILayout.Width(160f));
            this.savePoseButton.Draw(GUILayout.ExpandWidth(false));
            GUILayout.EndHorizontal();

            GUI.enabled = true;
        }

        private void OnSavePose(object sender, EventArgs args)
        {
            byte[] anmBinary = this.meidoManager.ActiveMeido.SerializePose();
            Constants.AddPose(anmBinary, this.poseNameTextField.Value, this.categoryComboBox.Value);
            this.poseNameTextField.Value = String.Empty;
        }
    }
}