using System.Collections.Generic;
using UniRx;
using UnityEngine;

public class ResolutionDatas
{
    public List<ResolutionData> ResList;
}

public class ResolutionData
{
    public int Width;
    public int Height;
}

public class GameSettingData
{
    /// <summary>
    /// 省份
    /// </summary>
    public int Province { get; set; } = 0;
    /// <summary>
    /// 城市
    /// </summary>
    public int City { get; set; } = 0;
    /// <summary>
    /// 城市代码
    /// </summary>
    //public string CityCode { get; set; } = "101010100";
    /// <summary>
    /// 实时天气
    /// </summary>
    public bool RealTimeWeather { get; set; } = true;
    /// <summary>
    ///天气
    /// <summary>
    public int Weather{get;set; } = 0;
    /// <summary>
    ///温度
    /// <summary>
    public int Temperature{get;set;} = 0;
    /// <summary>
    ///风力
    /// <summary>
    public int WindForce{get;set; } = 2;
    /// <summary>
    ///风向
    /// <summary>
    public int WindDirection{get;set;} = 2;
    /// <summary>
    ///昼夜交替
    /// <summary>
    public bool TimeOfDay{get;set;} = false;
    /// <summary>
    ///持续时间
    /// <summary>
    public float Duration{get;set;} = 0.1f;
    /// <summary>
    ///时间
    /// <summary>
    public float Time{get;set;} = 11;
    /// <summary>
    ///贴图质量
    /// <summary>
    public int TextureQuality{get;set;} = 0;
    /// <summary>
    ///各向异性
    /// <summary>
    public int Anisotropic { get; set; } = 1;
    public int Quality { get; set; } = 1;
    /// <summary>
    ///阴影开关
    /// <summary>
    public bool ShadowSwitch { get; set; } = true;
    /*
    /// <summary>
    ///抗锯齿
    /// <summary>
    public int Antialiasing{get;set; } = 1;
    /// <summary>
    ///阴影质量
    /// <summary>
    public int ShadowResolution{get;set; } = 1;
    /// <summary>
    ///阴影距离
    /// <summary>
    public int ShadowDistance{get;set;} = 500;*/
    /// <summary>
    ///亮度
    /// <summary>
    public float Brightness { get; set; } = 0;
    /// <summary>
    /// 反射
    /// </summary>
    public int Reflection { get; set; } = 1;
    /// <summary>
    ///分辨率
    /// <summary>
    public int Resolution{get;set; } = 1;
    /// <summary>
    ///全屏
    /// <summary>
    public bool FullScreen{get;set;} = false;
}
public class GameSettingDataReactive:ISetData<GameSettingData>
{
    /// <summary>
    ///Data
    /// <summary>
    private GameSettingData Data{get;set;}= new GameSettingData();
    /// <summary>
    /// 省份
    /// </summary>
    public ReactiveProperty<int> Province { get; set; } = new ReactiveProperty<int>(0);
    /// <summary>
    /// 城市
    /// </summary>
    public ReactiveProperty<int> City { get; set; } = new ReactiveProperty<int>(0);
    /// <summary>
    /// 城市代码
    /// </summary>
    //public ReactiveProperty<string> CityCode { get; set; } = new ReactiveProperty<string>("101010100");
    /// <summary>
    /// 实时天气
    /// </summary>
    public ReactiveProperty<bool> RealTimeWeather { get; set; } = new ReactiveProperty<bool>(true);
    /// <summary>
    ///天气
    /// <summary>
    public ReactiveProperty<int> Weather{get;set;}= new ReactiveProperty<int>(0);
    /// <summary>
    ///温度
    /// <summary>
    public ReactiveProperty<int> Temperature{get;set;}= new ReactiveProperty<int>(0);
    /// <summary>
    ///风力
    /// <summary>
    public ReactiveProperty<int> WindForce{get;set;}= new ReactiveProperty<int>(2);
    /// <summary>
    ///风向
    /// <summary>
    public ReactiveProperty<int> WindDirection{get;set;}= new ReactiveProperty<int>(2);
    /// <summary>
    ///昼夜交替
    /// <summary>
    public ReactiveProperty<bool> TimeOfDay{get;set;}= new ReactiveProperty<bool>(false);
    /// <summary>
    ///持续时间
    /// <summary>
    public ReactiveProperty<float> Duration{get;set;}= new ReactiveProperty<float>(0.1f);
    /// <summary>
    ///时间
    /// <summary>
    public ReactiveProperty<float> Time{get;set;}= new ReactiveProperty<float>(11.0f);
    /// <summary>
    ///贴图质量
    /// <summary>
    public ReactiveProperty<int> TextureQuality{get;set;}= new ReactiveProperty<int>(0);
    /// <summary>
    ///各向异性
    /// <summary>
    public ReactiveProperty<int> Anisotropic { get; set; } = new ReactiveProperty<int>(1);
    public ReactiveProperty<int> Quality { get; set; } = new ReactiveProperty<int>(1);
    /// <summary>
    ///阴影开关
    /// <summary>
    public ReactiveProperty<bool> ShadowSwitch { get; set; } = new ReactiveProperty<bool>(true);
    /*
    /// <summary>
    ///抗锯齿
    /// <summary>
    public ReactiveProperty<int> Antialiasing{get;set;}= new ReactiveProperty<int>(1);
   
    /// <summary>
    ///阴影质量
    /// <summary>
    public ReactiveProperty<int> ShadowResolution{get;set;}= new ReactiveProperty<int>(1);
    /// <summary>
    ///阴影距离
    /// <summary>
    public ReactiveProperty<int> ShadowDistance{get;set;}= new ReactiveProperty<int>(500);
    */
    /// <summary>
    ///亮度
    /// <summary>
    public ReactiveProperty<float> Brightness { get; set; } = new ReactiveProperty<float>(0);
    /// <summary>
    /// 反射
    /// </summary>
    public ReactiveProperty<int> Reflection { get; set; } = new ReactiveProperty<int>(1);
    /// <summary>
    ///分辨率
    /// <summary>
    public ReactiveProperty<int> Resolution{get;set;}= new ReactiveProperty<int>(1);
    /// <summary>
    ///全屏
    /// <summary>
    public ReactiveProperty<bool> FullScreen{get;set;}= new ReactiveProperty<bool>(false);

    public GameSettingDataReactive()
    {
        Weather.Subscribe(value => Data.Weather= value);
        Province.Subscribe(value => Data.Province = value);
        City.Subscribe(value => Data.City = value);
        //CityCode.Subscribe(value => Data.CityCode = value);
        RealTimeWeather.Subscribe(value => Data.RealTimeWeather = value);
        Temperature.Subscribe(value => Data.Temperature= value);
        WindForce.Subscribe(value => Data.WindForce= value);
        WindDirection.Subscribe(value => Data.WindDirection= value);
        TimeOfDay.Subscribe(value => Data.TimeOfDay= value);
        Duration.Subscribe(value => Data.Duration= value);
        Time.Subscribe(value => Data.Time= value);
        TextureQuality.Subscribe(value => Data.TextureQuality= value);
        Anisotropic.Subscribe(value => Data.Anisotropic = value);
        Quality.Subscribe(value => Data.Quality = value);
        //Antialiasing.Subscribe(value => Data.Antialiasing= value);
        ShadowSwitch.Subscribe(value => Data.ShadowSwitch = value);
        //ShadowResolution.Subscribe(value => Data.ShadowResolution= value);
        //ShadowDistance.Subscribe(value => Data.ShadowDistance= value);
        Brightness.Subscribe(value => Data.Brightness = value);
        Reflection.Subscribe(value => Data.Reflection = value);
        Resolution.Subscribe(value => Data.Resolution= value);
        FullScreen.Subscribe(value => Data.FullScreen= value);
    }

    public void SetData(GameSettingData data)
    {
        Data = data;
        Province.Value = data.Province;
        City.Value = data.City;
        //CityCode.Value = data.CityCode;
        RealTimeWeather.Value = data.RealTimeWeather;
        Weather.Value = data.Weather;
        Temperature.Value = data.Temperature;
        WindForce.Value = data.WindForce;
        WindDirection.Value = data.WindDirection;
        TimeOfDay.Value = data.TimeOfDay;
        Duration.Value = data.Duration;
        Time.Value = data.Time;
        TextureQuality.Value = data.TextureQuality;
        Anisotropic.Value = data.Anisotropic;
        Quality.Value = data.Quality;
        //Antialiasing.Value = data.Antialiasing;
        ShadowSwitch.Value = data.ShadowSwitch;
        //ShadowResolution.Value = data.ShadowResolution;
        //ShadowDistance.Value = data.ShadowDistance;
        Brightness.Value = data.Brightness;
        Reflection.Value = data.Reflection;
#if UNITY_STANDALONEL
        Resolution.Value = data.Resolution;
        FullScreen.Value = data.FullScreen;
#endif
    }

    public GameSettingData GetData()
    {
        return Data;
    }
}