﻿using System;
using JLGames.RocketDriver.Actions.Utils;
using UnityEngine;

namespace JLGames.RocketDriver.Games.PanelManager
{
    [Serializable]
    public class RegisterPanelInfo
    {
        [Serializable]
        public class BackgroundSettings
        {
            [Tooltip("Background Mode\n背景模式")] public PanelBackgroundMode Mode;

            [Tooltip("Background Meta Keyp\n背景元视图")]
            public string OriginKey;

            [Tooltip("Background Color\n背景颜色")] public Color Color = Color.white;

            [Tooltip("Background Image Bundle\n背景图片所在Bundle")]
            public string ImageBundleName;

            [Tooltip("Background Image Path\n背景图片所在路径")]
            public string ImageAssetPath;

            [Tooltip("Background Image Sprite\n背景图片使用的精灵引用")]
            public Sprite ImageSprite;

            [Tooltip("Screenshot Blur Factor\n截屏系数")] [Range(0f, 1f)]
            public float ScreenshotFactor = 1f;

            [Tooltip("Image Blur Factor\n模糊系数")] [Range(0f, 1f)]
            public float BlurFactor = 1f;

            internal PanelBackgroundSettings ToSettings()
            {
                return new PanelBackgroundSettings(Mode, OriginKey, Color, ImageBundleName, ImageAssetPath, ImageSprite,
                    ScreenshotFactor, BlurFactor);
            }
        }

        [Serializable]
        public class AnimSettings
        {
            [Tooltip("Open Animation Key\n打开动画\nFormat格式：\"Key:State\"")]
            public string OpenAnim;

            [Tooltip("Close Animation Key\n关闭动画\nFormat格式：\"Key:State\"")]
            public string CloseAnim;

            internal PanelAnimSettings ToSettings()
            {
                if (string.IsNullOrEmpty(OpenAnim) && string.IsNullOrEmpty(CloseAnim)) return null;
                return new PanelAnimSettings(OpenAnim, CloseAnim);
            }
        }

        [Serializable]
        public class AssetSettings
        {
            [Tooltip("Bundle Name\nAssetbundle名称")]
            public string BundleName;

            [Tooltip("Asset Path\n资源路径")] public string AssetPath;

            [Tooltip("Main Script Full Name\n主脚本完整类名")]
            public string MainScriptName;

            [Tooltip("Main Script Arguments\n主脚本注入的参数字符串")]
            public string MainScriptParams;

            internal PanelAssetSettings ToSettings()
            {
                return new PanelAssetSettings(BundleName, AssetPath, MainScriptName, MainScriptParams);
            }
        }

        [Tooltip("Panel Id\n面板Id")] public string Id;

        [Tooltip("Panel Asset Settings\n面板资源配置")] [SerializeField]
        private AssetSettings m_Asset;

        [Tooltip("Panel Background Settings\n面板背景配置")] [SerializeField]
        private BackgroundSettings m_Background;

        [Tooltip("Panel Background Settings\n面板动画")] [SerializeField]
        private AnimSettings m_Anim;

        [Tooltip("Panel Max Display Count\n面板最大显示数量")] [Range(0, 999)]
        public int MaxDisplayNum = 1;

        [Tooltip("Panel Extend Type\n面板扩展类型")] public int ExtendType;

        public IPanelSettings GenPanelSettings(IPanelRegister register)
        {
            var asset = m_Asset.ToSettings();
            var background = m_Background.ToSettings();
            background.SetRegister(register);
            var anim = m_Anim.ToSettings();
            return new PanelSettings(asset, background, anim);
        }
    }
}