﻿using UnityEngine;

namespace JLGames.RocketDriver.Games.PanelManager
{
    public class PanelBackgroundSettings : IPanelBackgroundSettings
    {
        private IPanelRegister m_Register;
        private PanelBackgroundMode m_Mode;
        private string m_OriginKey;
        private Color m_Color;
        private string m_ImageBundle;
        private string m_ImagePath;
        private Sprite m_ImageSprite;
        private float m_ScreenshotFactor;
        private float m_BlurFactor;

        public PanelBackgroundMode Mode => m_Mode;
        public string OriginKey => m_OriginKey;
        public BackgroundInfo OriginInfo => string.IsNullOrEmpty(m_OriginKey) ? null : m_Register?.GetBackground(m_OriginKey);
        public Color Color => m_Color;
        public string ImageBundle => m_ImageBundle;
        public string ImagePath => m_ImagePath;
        public Sprite ImageSprite => m_ImageSprite;
        public float ScreenshotFactor => m_ScreenshotFactor;
        public float BlurFactor => m_BlurFactor;

        public PanelBackgroundSettings()
        {
        }

        public PanelBackgroundSettings(PanelBackgroundMode mode, string originKey,
            Color color, string imageBundle, string imagePath, Sprite imageSprite,
            float screenshotFactor, float blurFactor)
        {
            m_Mode = mode;
            m_OriginKey = originKey;
            m_Color = color;
            m_ImageBundle = imageBundle;
            m_ImagePath = imagePath;
            m_ImageSprite = imageSprite;
            m_ScreenshotFactor = screenshotFactor;
            m_BlurFactor = blurFactor;
        }

        public void SetRegister(IPanelRegister register)
        {
            m_Register = register;
        }

        public void SetColorMode(Color color)
        {
            m_Mode = PanelBackgroundMode.Color;
            m_Color = color;
            m_ImageBundle = null;
            m_ImagePath = null;
            m_ImageSprite = null;
        }

        public void SetImageMode(string imageBundle, string imagePath)
        {
            m_Mode = PanelBackgroundMode.Image;
            m_ImageBundle = imageBundle;
            m_ImagePath = imagePath;
            m_ImageSprite = null;
        }

        public void SetImageMode(Sprite imageSprite)
        {
            m_Mode = PanelBackgroundMode.Image;
            m_ImageBundle = null;
            m_ImagePath = null;
            m_ImageSprite = imageSprite;
        }

        public void SetScreenshotMode(float screenshotFactor)
        {
            m_Mode = PanelBackgroundMode.Screenshot;
            m_ImageBundle = null;
            m_ImagePath = null;
            m_ImageSprite = null;
            m_ScreenshotFactor = Mathf.Clamp(screenshotFactor, 0, 1);
        }

        public void SetBlurFactor(float blurFactor)
        {
            m_BlurFactor = Mathf.Clamp(blurFactor, 0, 1);
        }
    }
}