using Billing.UI;
using Xamarin.Essentials;
using Xamarin.Forms;

namespace Billing.Themes
{
    public class Light : BaseTheme
    {
        private static Light _instance;

        public static Light Instance => _instance ??= new Light();

        private Color primaryColor;

        protected override Color PrimaryMauiColor => primaryColor;
        protected override Color SecondaryMauiColor => Color.White;

        public Light()
        {
            var color = Preferences.Get(Definition.PrimaryColorKey, "#183153");
            primaryColor = Color.FromHex(color);

            InitColors();
            InitResources();
        }

        public void RefreshColor(Color primary)
        {
            primaryColor = primary;
            Clear();

            InitColors();
            InitResources();
        }

        private void InitColors()
        {
            Add(WindowBackgroundColor, Color.White);
            Add(OptionTintColor, Color.White);
            Add(PromptBackgroundColor, Color.FromRgb(0xe0, 0xe0, 0xe0));
            Add(TabBarBackgroundColor, Color.White);
            Add(TabBarUnselectedColor, Color.FromRgb(0x82, 0x82, 0x82));
            Add(OutRangeDayColor, Color.LightGray);
            Add(TextColor, Color.FromRgb(0x33, 0x33, 0x33));
            Add(SecondaryTextColor, Color.DimGray);
            Add(RedColor, Color.FromRgb(211, 64, 85));
            Add(GreenColor, Color.FromRgb(64, 211, 85));

            Add(new Style(typeof(TabBar))
            {
                Setters =
                {
                    new Setter { Property = Shell.TabBarBackgroundColorProperty, Value = Color.White },
                    new Setter { Property = Shell.TabBarTitleColorProperty, Value = primaryColor },
                    new Setter { Property = Shell.TabBarUnselectedColorProperty, Value = Color.FromRgb(0x82, 0x82, 0x82) }
                }
            });
            Add(new Style(typeof(TableView))
            {
                Setters =
                {
                    new Setter { Property = VisualElement.BackgroundColorProperty, Value = Color.FromRgb(242, 241, 245) }
                }
            });
        }
    }
}