using log4net;
using SparkClient.Model.Helper;
using SparkClient.ViewModel.Grading;

namespace SparkClient.ViewModel.Configuration.SettingsPages;
/// <summary>
/// 系统配置中颜色配置页面VM
/// </summary>
public class ModelColorSetPageVM : BaseViewModel
{
    private static readonly ILog Logger = LogManager.GetLogger(typeof(ModelColorSetPageVM));
    private string _FACET_COLOR;
    private string _BORDER_COLOR;
    private string _SELECTED_FACET_COLOR;
    private string _SELECTED_BORDER_COLOR;
    private string _SELECTED_TYPE_COLOR;
    private string _SELECTED_FONT_COLOR;
    private string _RULER_COLOR;
    private string _ARROW_COLOR;
    private string _BLEMISH_FACET_COLOR;
    private string _TABLE_FACET_COLOR;
    private string _UPPER_MAIN_FACET_COLOR;
    private string _STAR_FACET_COLOR;
    private string _UPPER_GIRDLE_FACET_COLOR;
    private string _GIRDLE_FACET_COLOR;
    private string _PAVILION_MAIN_FACET_COLOR;
    private string _LOWER_GIRDLE_FACET_COLOR;
    private string _CULET_COLOR;
    /// <summary>
    /// 面部颜色
    /// </summary>
    public string FACET_COLOR { get { return _FACET_COLOR; } set { _FACET_COLOR = value; OnPropertyChanged(nameof(FACET_COLOR)); } }
    /// <summary>
    /// 边框颜色
    /// </summary>
    public string BORDER_COLOR { get { return _BORDER_COLOR; } set { _BORDER_COLOR = value; OnPropertyChanged(nameof(BORDER_COLOR)); } }
    /// <summary>
    /// 选中面颜色
    /// </summary>
    public string SELECTED_FACET_COLOR { get { return _SELECTED_FACET_COLOR; } set { _SELECTED_FACET_COLOR = value; OnPropertyChanged(nameof(SELECTED_FACET_COLOR)); } }
    /// <summary>
    /// 选中面边框颜色
    /// </summary>
    public string SELECTED_BORDER_COLOR { get { return _SELECTED_BORDER_COLOR; } set { _SELECTED_BORDER_COLOR = value; OnPropertyChanged(nameof(SELECTED_BORDER_COLOR)); } }
    /// <summary>
    /// 选中面同类面颜色
    /// </summary>
    public string SELECTED_TYPE_COLOR { get { return _SELECTED_TYPE_COLOR; } set { _SELECTED_TYPE_COLOR = value; OnPropertyChanged(nameof(SELECTED_TYPE_COLOR)); } }
    /// <summary>
    /// 选中面文字信息颜色
    /// </summary>
    public string SELECTED_FONT_COLOR { get { return _SELECTED_FONT_COLOR; } set { _SELECTED_FONT_COLOR = value; OnPropertyChanged(nameof(SELECTED_FONT_COLOR)); } }
    /// <summary>
    /// 标识线条颜色
    /// </summary>
    public string RULER_COLOR { get { return _RULER_COLOR; } set { _RULER_COLOR = value; OnPropertyChanged(nameof(RULER_COLOR)); } }
    /// <summary>
    /// 正方向标记颜色
    /// </summary>
    public string ARROW_COLOR { get { return _ARROW_COLOR; } set { _ARROW_COLOR = value; OnPropertyChanged(nameof(ARROW_COLOR)); } }
    /// <summary>
    /// 瑕疵面颜色
    /// </summary>
    public string BLEMISH_FACET_COLOR { get { return _BLEMISH_FACET_COLOR; } set { _BLEMISH_FACET_COLOR = value; OnPropertyChanged(nameof(BLEMISH_FACET_COLOR)); } }
    /// <summary>
    /// 台面颜色
    /// </summary>
    public string TABLE_FACET_COLOR { get { return _TABLE_FACET_COLOR; } set { _TABLE_FACET_COLOR = value; OnPropertyChanged(nameof(TABLE_FACET_COLOR)); } }
    /// <summary>
    /// 风筝面颜色
    /// </summary>
    public string UPPER_MAIN_FACET_COLOR { get { return _UPPER_MAIN_FACET_COLOR; } set { _UPPER_MAIN_FACET_COLOR = value; OnPropertyChanged(nameof(UPPER_MAIN_FACET_COLOR)); } }
    /// <summary>
    /// 星刻面颜色
    /// </summary>
    public string STAR_FACET_COLOR { get { return _STAR_FACET_COLOR; } set { _STAR_FACET_COLOR = value; OnPropertyChanged(nameof(STAR_FACET_COLOR)); } }
    /// <summary>
    /// 上腰面颜色
    /// </summary>
    public string UPPER_GIRDLE_FACET_COLOR { get { return _UPPER_GIRDLE_FACET_COLOR; } set { _UPPER_GIRDLE_FACET_COLOR = value; OnPropertyChanged(nameof(UPPER_GIRDLE_FACET_COLOR)); } }
    /// <summary>
    /// 腰面颜色
    /// </summary>
    public string GIRDLE_FACET_COLOR { get { return _GIRDLE_FACET_COLOR; } set { _GIRDLE_FACET_COLOR = value; OnPropertyChanged(nameof(GIRDLE_FACET_COLOR)); } }
    /// <summary>
    /// 亭部主刻面颜色
    /// </summary>
    public string PAVILION_MAIN_FACET_COLOR { get { return _PAVILION_MAIN_FACET_COLOR; } set { _PAVILION_MAIN_FACET_COLOR = value; OnPropertyChanged(nameof(PAVILION_MAIN_FACET_COLOR)); } }
    /// <summary>
    /// 下腰面颜色
    /// </summary>
    public string LOWER_GIRDLE_FACET_COLOR { get { return _LOWER_GIRDLE_FACET_COLOR; } set { _LOWER_GIRDLE_FACET_COLOR = value; OnPropertyChanged(nameof(LOWER_GIRDLE_FACET_COLOR)); } }
    /// <summary>
    /// 底面颜色
    /// </summary>
    public string CULET_COLOR { get { return _CULET_COLOR; } set { _CULET_COLOR = value; OnPropertyChanged(nameof(CULET_COLOR)); } }

    private Dictionary<string, string> colors;
    public ModelColorSetPageVM()
    {
        InitSetting();
    }
    /// <summary>
    /// 页面初始化参数赋值
    /// </summary>
    private void InitSetting()
    {
        try
        {
            colors = new Dictionary<string, string>();
            colors.Add("FACET_COLOR", "面部颜色");
            colors.Add("BORDER_COLOR", "边框颜色");
            colors.Add("SELECTED_FACET_COLOR", "选中面颜色");
            colors.Add("SELECTED_BORDER_COLOR", "选中面边框颜色");
            colors.Add("SELECTED_TYPE_COLOR", "选中面同类面颜色");
            colors.Add("SELECTED_FONT_COLOR", "选中面文字信息颜色");
            colors.Add("RULER_COLOR", "标识线条颜色");
            colors.Add("ARROW_COLOR", "正方向标记颜色");
            colors.Add("BLEMISH_FACET_COLOR", "瑕疵面颜色");
            colors.Add("TABLE_FACET_COLOR", "台面颜色");
            colors.Add("UPPER_MAIN_FACET_COLOR", "风筝面颜色");
            colors.Add("STAR_FACET_COLOR", "星刻面颜色");
            colors.Add("UPPER_GIRDLE_FACET_COLOR", "上腰面颜色");
            colors.Add("GIRDLE_FACET_COLOR", "腰面颜色");
            colors.Add("PAVILION_MAIN_FACET_COLOR", "亭部主刻面颜色");
            colors.Add("LOWER_GIRDLE_FACET_COLOR", "下腰面颜色");
            colors.Add("CULET_COLOR", "底面颜色");

            foreach (var color in colors)
            {
                setColor(color.Key);
            }
        }
        catch (Exception ex)
        {
            Logger.Error($"全局异常捕获:{ex.Message}", ex);
        }
    }
    /// <summary>
    /// 颜色数据更新
    /// </summary>
    /// <param name="param"></param>
    /// <returns></returns>
    public bool SaveUpdate(object param)
    {
        try
        {
            DataBaseHelper.BeginTransaction();
            foreach (var color in colors)
            {
                updateDataBase(color.Key);
            }
            DataBaseHelper.commit();
            return true;
        }
        catch (Exception ex)
        {
            Logger.Error($"全局异常捕获:{ex.Message}", ex);
            return false;
        }
    }
    private void updateDataBase(string SETTING_ID)
    {
        Type type = this.GetType();
        Settings colorData = new Settings()
        {
            Key = SETTING_ID,
            ItemName = colors[SETTING_ID],
            Value = (string)type.GetProperty(SETTING_ID).GetValue(this),
        };
        colorData.insert();
    }
    /// <summary>
    /// 画面中颜色属性赋值
    /// </summary>
    /// <param name="SETTING_ID"></param>
    private void setColor(string SETTING_ID)
    {
        var value = Settings.SelectValueById(SETTING_ID);
        if (value == null || string.IsNullOrEmpty(value))
        {
            value = "#FF000000";
        }
        Type type = this.GetType();
        type.GetProperty(SETTING_ID).SetValue(this, value);
    }

}