using Config.config;
using System;
/// 
/// 用户数据管理器
/// 
public class UserDataManager : SingletonManager
{
    /// 
    /// 用户数据
    /// 
    public UserData userData;
    /// 
    /// 初始化
    /// 
    public void Init()
    {
        if (ES3.KeyExists("GameData"))
        {
            userData = ES3.Load("GameData") as UserData;
            if (!userData.guidance.isOverInitialEntry)
            {
                userData.gameNumber = 0;
            }
        }
        else
        {
            userData = new UserData();
            userData.level = 0;
            userData.useCar = "Car_1";
            userData.skillId = "Skill_1";
            AddCar("Car_1");
            AddSkill("Skill_1");
        }
    }
    /// 
    /// 加金币
    /// 
    public void AddMoney(int value)
    {
        userData.money += value;
        SaveUserData();
    }
    /// 
    /// 加关卡
    /// 
    public void AddLevel()
    {
        userData.level++;
        SaveUserData();
    }
    /// 
    /// 添加关卡数
    /// 
    public void AddGameNumber()
    {
        userData.gameNumber++;
        SaveUserData();
    }
    /// 
    /// 设置已使用免费子弹时间
    /// 
    public void SetIsFreeSpeedbreaker()
    {
        if (userData.isFreeSpeedbreaker) return;
        userData.isFreeSpeedbreaker = true;
        SaveUserData();
    }
    /// 
    /// 设置已使用随机技能
    /// 
    public void SetIsRandomSkill()
    {
        if (userData.isRandomSkill) return;
        userData.isRandomSkill = true;
        SaveUserData();
    }
    /// 
    /// 减金币
    /// 
    /// 
    public bool RemoveMoney(int value)
    {
        bool isEnough = false;
        if (userData.money >= value)
        {
            userData.money -= value;
            Scenes.Instance.GoldCoin();
            isEnough = true;
        }
        return isEnough;
    }
    /// 
    /// 得到增加能量
    /// 
    public float GetBoostEnergy()
    {
        return ConfigManager.Instance.Tables.TbSkillConfig.Get(userData.skillId).BoostEnergy;
    }
    /// 
    /// 得到释放能量
    /// 
    public float GetEnergesis()
    {
        return ConfigManager.Instance.Tables.TbSkillConfig.Get(userData.skillId).Energesis;
    }
    /// 
    /// 得到持续时间
    /// 
    private float GetTimeOfDuration(string skillId)
    {
        return ConfigManager.Instance.Tables.TbSkillConfig.Get(skillId).TimeOfDuration;
    }
    /// 
    /// 得到已有技能持续时间
    /// 
    /// 
    public float GetAlreadyHaveTimeOfDuration(string skillId)
    {
        if (userData.skillData.ContainsKey(skillId))
        {
            return userData.skillData[skillId].timeOfDuration;
        }
        else
        {
            return GetTimeOfDuration(skillId);
        }
    }
    /// 
    /// 是否是试玩技能
    /// 
    /// 
    public bool IsTrySkill()
    {
        if (userData.skillData.ContainsKey(userData.skillId))
        {
            return false;
        }
        return true;
    }
    /// 
    /// 设置时间
    /// 
    public void SetAdTime()
    {
        userData.aDDateTime = DateTime.Now;
        SaveUserData();
    }
    /// 
    /// 添加车
    /// 
    /// 
    public void AddCar(string id)
    {
        if (!userData.cars.Contains(id))
        {
            userData.cars.Add(id);
            SaveUserData();
        }
    }
    /// 
    /// 设置使用的车
    /// 
    public void SetUseCar(string id)
    {
        userData.useCar = id;
        SaveUserData();
    }
    /// 
    /// 设置使用技能
    /// 
    public void SetSkillId(string id)
    {
        userData.skillId = id;
        SaveUserData();
    }
    /// 
    /// 试用技能完毕
    /// 
    public void TrySkillOver()
    {
        if(!userData.skillData.ContainsKey(userData.skillId))
        {
            SetSkillId("Skill_1");
        }
    }
    /// 
    /// 添加皮肤车广告
    /// 
    /// 
    public void AddCarAD(string id)
    {
        if (userData.carAD.ContainsKey(id))
        {
            userData.carAD[id]++;
        }
        else
        {
            userData.carAD.Add(id, 1);
        }
    }
    /// 
    /// 添加技能
    /// 
    public void AddSkill(string id)
    {
        SkillConfig skillConfig = ConfigManager.Instance.Tables.TbSkillConfig.Get(id);
        if (!userData.skillData.ContainsKey(id))
        {
            SkillData skillData = new SkillData();
            skillData.lv = 1;
            skillData.boostEnergy = skillConfig.BoostEnergy;
            skillData.timeOfDuration = skillConfig.TimeOfDuration;
            userData.skillData.Add(id, skillData);
        }
        else
        {
            userData.skillData[id].lv++;
            userData.skillData[id].boostEnergy += skillConfig.Energesis * (5 / 100);
            userData.skillData[id].timeOfDuration += 0.5f;
        }
        SaveUserData();
    }
    /// 
    /// 添加试用技能
    /// 
    public void AddTryOutSlill(string id)
    {
        if (!userData.tryOutSlill.Contains(id))
        {
            userData.tryOutSlill.Add(id);
            SaveUserData();
        }
    }
    /// 
    /// 设置技能广告升级
    /// 
    public void AddSlillUpgrade(string id)
    {
        if (!userData.skillUpgradeData.ContainsKey(id))
        {
            userData.skillUpgradeData.Add(id, 1);
            SaveUserData();
        }
    }
    /// 
    /// 设置技能广告次数
    /// 
    public void SetSlillUpgrade(string id)
    {
        userData.skillUpgradeData[id]++;
        SaveUserData();
    }
    /// 
    /// 升级金币
    /// 
    public int UpgradeMoney(string id)
    {
        return 7500 + (userData.skillData[id].lv - 1) * 5000;
    }
    /// 
    /// 设置背景音乐大小
    /// 
    public void SetBKMusicVolume(float value)
    {
        userData.soundSwitchData.bKMusicVolume = value;
        SaveUserData();
    }
    /// 
    /// 设置音效大小
    /// 
    public void SetSEVolume(float value)
    {
        userData.soundSwitchData.sEVolume = value;
        SaveUserData();
    }
    /// 
    /// 保存玩家数据
    /// 
    public void SaveUserData()
    {
        ES3.Save("GameData", userData);
    }
}