using System.Collections;
using System.Collections.Generic;
using System.IO;
using Castle.Core.Internal;
using Newtonsoft.Json;
using UnityEngine;
namespace BingoBrain
{
    public class SaveData
    {
        public static Saveobject saveobject;
        public static Saveobject GetSaveobject()
        {
            if (saveobject == null)
            {
                if (File.Exists(jsonFilePath))
                {
                    string jsonstr = File.ReadAllText(jsonFilePath);
                    saveobject = JsonConvert.DeserializeObject<Saveobject>(jsonstr);
                    Debug.Log("saveobject.uid" + saveobject.uid);
                    Debug.Log("login.uid" + GameHelper.GetLoginModel().uid);
                    if (saveobject.uid != GameHelper.GetLoginModel().uid && GameHelper.GetLoginModel().uid != 0)
                    {
                        saveobject = new Saveobject();
                        saveobject.uid = GameHelper.GetLoginModel().uid;
                    }
                    return saveobject;
                }
                else
                {
                    saveobject = new Saveobject();
                    saveobject.uid = GameHelper.GetLoginModel().uid;
                    return saveobject;
                }
            }
            else return saveobject;

        }

        private static string jsonFilePath = Path.Combine(Application.persistentDataPath, "savedata22.json");

        public static void saveDataFunc()
        {
            if (saveobject == null) return;
            string save = JsonConvert.SerializeObject(saveobject);
            if (save.IsNullOrEmpty()) return;
            if (save == null || save == "") return;
            if (File.Exists(jsonFilePath)) File.Delete(jsonFilePath);
            File.WriteAllText(jsonFilePath, save);

        }
        public static bool battlepassred()
        {

            int pass_level = GameHelper.getBattleLv();
            List<int> freelist = SaveData.GetSaveobject().battle_pass_freelist;
            for (int i = 1; i <= ConfigSystem.GetConfig<PassportrewardsModel>().dataList.Count; i++)
            {
                if (pass_level >= i)
                {
                    if (!freelist.Contains(i))
                    {
                        return true;
                    }
                }

            }
            if (SaveData.GetSaveobject().is_get_battlepass)
            {
                List<int> paylist = SaveData.GetSaveobject().battle_pass_paylist;
                for (int i = 1; i <= ConfigSystem.GetConfig<PassportrewardsModel>().dataList.Count; i++)
                {
                    if (pass_level >= i)
                    {
                        if (!paylist.Contains(i))
                        {
                            return true;
                        }
                    }
                }
            }
            return false;
        }

        public static bool passtaskred()
        {
            List<int> list = SaveData.GetSaveobject().pass_task_record;
            for (int i = 0; i < ConfigSystem.GetConfig<PassingTaskModel>().dataList.Count; i++)
            {
                if (GameHelper.GetLevel() > ConfigSystem.GetConfig<PassingTaskModel>().dataList[i].tol_num)
                {
                    if (!list.Contains(ConfigSystem.GetConfig<PassingTaskModel>().dataList[i].id)) return true;
                }
            }
            return false;
        }
        public static bool timetaskred()
        {
            List<int> list = SaveData.GetSaveobject().time_task_record;
            for (int i = 0; i < ConfigSystem.GetConfig<DurationtasksModel>().dataList.Count; i++)
            {
                if (GameHelper.GetGameTime() >= ConfigSystem.GetConfig<DurationtasksModel>().dataList[i].tol_num * 60)
                {
                    if (!list.Contains(ConfigSystem.GetConfig<DurationtasksModel>().dataList[i].id)) return true;
                }
            }
            return false;
        }
        public static bool getRed()
        {

            return battlepassred() || timetaskred() || passtaskred();
        }
        public static float pay_time = 0;


    }

    public class Saveobject
    {


        public long uid;
        public bool is_get_battlepass = false;
        public List<int> battle_pass_freelist = new List<int>();
        public List<int> battle_pass_paylist = new List<int>();



        // public int _goldtime0;
        // public int _goldtime1;
        // public int _goldtime2;
        // public int _goldtime3;
        // public int _goldtime4;
        // public bool have_slot;
        // public int battle_pass_time;


        public List<int> pass_task_record = new List<int>();
        public List<int> time_task_record = new List<int>();
        public int login_day;
        public int login_hour;
        // public int cash_people;
        // public float cash_people_1;
        // public float cash_people_2;

        // public bool is_get_packreward;

        public bool is_get_removead;
        // public bool is_autopack_show;
        // public int is_autopack_show_day;

        // public long start_time;
        // public int clear_number;

        // /// <summary>
        // /// 每一局使用道具数量（[0]:out [1]:back [2]:refresh）
        // /// </summary>
        // public int[] usePropsNum = new int[3];
        // /// <summary>
        // /// 卡牌层数
        // /// </summary>
        // public int card_layer;
        // /// <summary>
        // /// 卡牌总数量
        // /// </summary>
        // public int all_card_numbers;


        // public int this_time_cardtype;
        public int look_ad_numbers;
        // public int look_ad_time;
        public List<int> dark_Dayref;
        // public int[] _goldtime;
        // public MaxPayClass max_pay_object;

        public List<SaveingPotClass> saveingpot_history = new List<SaveingPotClass>();


        // public long failed_pack_time;
        // public int three_gift_got_index = 1;
        // public long last_got_three_gift_time = 0;
        // public bool is_get_ThreeDaysGift;
        //tixian
        public int ExchangeProcessMode = -1;
        public int CHProcessMode = -1;
        public int chout_lv;
        public int ch_people;
        public float ch_people_1;
        public float ch_people_2;
        public int _watch_ad_cd;
        public float saveingpot_ch;
        public float last_saveingpot_ch;
        public int ExchangeModeToggle = 1;
        public int PettyState;
        public string PettyAccount;
        public string PettyFirstName;
        public string PettyLastName;

        public int PettyAmount;
        public string PettyOrderID;
        public string PettyDateTime;
        public int PettyDataLimit;
    }
}
