﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Animations;
using UnityEditor;
using UnityEditor.Animations;
using VRC.SDK3.Avatars.Components;
using VRC.SDK3.Avatars.ScriptableObjects;
using System.IO;


namespace CRPen2
{
    public partial class CRPen2Editor : Editor
    {
        // RemovePrefab.
        private void RemovePrefab()
        {
            CRPen2Setting script = (CRPen2Setting)target;

            Transform penPrefab = script.avatar.transform.Find("ParticlePen");
            if (penPrefab)
            {
                DestroyImmediate(penPrefab.gameObject);
            }
        }

        // RemoveAnimator.
        private void RemoveAnimator()
        {
            CRPen2Setting script = (CRPen2Setting)target;

            if (script.avatar.customExpressions == false)
                return;

            RuntimeAnimatorController gesture = script.avatar.baseAnimationLayers[2].animatorController;
            if (gesture)
            {
                AnimatorController animatorController = (AnimatorController)gesture;
                CR_AnimatorControllerUtility.RemoveLayer(animatorController, "Pen_R");
                CR_AnimatorControllerUtility.RemoveLayer(animatorController, "Pen_L");

                CR_AnimatorControllerUtility.RemoveParameter(animatorController, "PenUse");
            }

            RuntimeAnimatorController fx = script.avatar.baseAnimationLayers[4].animatorController;
            if (fx)
            {
                AnimatorController animatorController = (AnimatorController)fx;
                CR_AnimatorControllerUtility.RemoveLayer(animatorController, "Pen_R");
                CR_AnimatorControllerUtility.RemoveLayer(animatorController, "Pen_L");
                CR_AnimatorControllerUtility.RemoveLayer(animatorController, "PenErase");
                CR_AnimatorControllerUtility.RemoveLayer(animatorController, "PenGrip");
                CR_AnimatorControllerUtility.RemoveLayer(animatorController, "PenColor");
                CR_AnimatorControllerUtility.RemoveLayer(animatorController, "PenSize_R");
                CR_AnimatorControllerUtility.RemoveLayer(animatorController, "PenSize_L");
                CR_AnimatorControllerUtility.RemoveLayer(animatorController, "PenEmission");

                CR_AnimatorControllerUtility.RemoveParameter(animatorController, "PenUse");
                CR_AnimatorControllerUtility.RemoveParameter(animatorController, "PenErase");
                CR_AnimatorControllerUtility.RemoveParameter(animatorController, "PenGrip");
                CR_AnimatorControllerUtility.RemoveParameter(animatorController, "PenSize");
                CR_AnimatorControllerUtility.RemoveParameter(animatorController, "PenColor");
                CR_AnimatorControllerUtility.RemoveParameter(animatorController, "PenEmission");
            }
        }

        // Remove Menu.
        private void RemoveMenu()
        {
            CRPen2Setting script = (CRPen2Setting)target;

            if (!script.avatar.expressionsMenu)
                return;

            VRCExpressionsMenu.Control control = CR_VRCMenuUtility.MenuFindControl(script.avatar.expressionsMenu, "Pen");
            if (control != null)
                script.avatar.expressionsMenu.controls.Remove(control);

            EditorUtility.SetDirty(script.avatar.expressionsMenu);
        }

        // Remove Parameter.
        private void RemoveParameter()
        {
            CRPen2Setting script = (CRPen2Setting)target;

            if (!script.avatar.expressionParameters)
                return;

            CR_VRCMenuUtility.RemoveParameter(script.avatar.expressionParameters, "PenUse");
            CR_VRCMenuUtility.RemoveParameter(script.avatar.expressionParameters, "PenErase");
            CR_VRCMenuUtility.RemoveParameter(script.avatar.expressionParameters, "PenColor");
            CR_VRCMenuUtility.RemoveParameter(script.avatar.expressionParameters, "PenGrip");
            CR_VRCMenuUtility.RemoveParameter(script.avatar.expressionParameters, "PenSize");
            CR_VRCMenuUtility.RemoveParameter(script.avatar.expressionParameters, "PenEmission");
        }
    }
}