﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using Newtonsoft.Json;
using UnityEngine;

public class SaveAndLoadManager
{
    public static void SaveData(string name,int age,int height)
    {
        var data = new PlayerData();
        data.Name = name;
        data.Age = age;
        data.Height = height;
        //
        data.Fruits.Add("Bananas");
        data.Fruits.Add("Pears");
        data.Fruits.Add("Pineapples");
        //
        data.Pets.Add("Cat",1);
        data.Pets.Add("Dog",2);

        //var jsonStr = JsonUtility.ToJson(data);
        var jsonStr = JsonConvert.SerializeObject(data);
        var filePath = Application.persistentDataPath + "/playerData.json";
        System.IO.File.WriteAllText(filePath, jsonStr);
    }

    public static PlayerData LoadData()
    {
        var filePath = Application.persistentDataPath + "/playerData.json";
        if (File.Exists(filePath))
        {
            var jsonStr = File.ReadAllText(filePath);
            //var data = JsonUtility.FromJson<PlayerData>(jsonStr);
            var data = JsonConvert.DeserializeObject<PlayerData>(jsonStr);
            
            return data;
        }
        else
        {
            return new PlayerData();
        }
    }
    //
    public static void SaveGameData(int level ,int score)
    {
        var data = new GameData();
        data.Level = level;
        data.Score = score;
        //
        data.Fruits.Add("Bananas");
        data.Fruits.Add("Pears");
        data.Fruits.Add("Pineapples");
        //
        data.Pets.Add("Cat",1);
        data.Pets.Add("Dog",2);
        //
        var filePath = Application.persistentDataPath + "/gameData.db";
        
        var formatter = new BinaryFormatter();
        var stream = new FileStream(filePath, FileMode.Create);
        
        formatter.Serialize(stream, data);
        stream.Close();
    }

    public static GameData LoadGameData()
    {
        var filePath = Application.persistentDataPath + "/gameData.db";
        if (File.Exists(filePath))
        {
            var formatter = new BinaryFormatter();
            var stream = new FileStream(filePath, FileMode.Open);
            
            var data = formatter.Deserialize(stream) as GameData;
            stream.Close();
            return data;
        }
        else
        {
            return new GameData();
        }
    }
}

public class PlayerData
{
    public string Name = "none";
    [JsonIgnore]
    public int Age;
    public int Height;
    
    public List<string> Fruits = new List<string>();
    public Dictionary<string, int> Pets = new Dictionary<string, int>();//key : name , value : num
}


[Serializable]
public class GameData
{
    public string Version =  "1.0.0";
    public int Level = 1;
    public int Score = 0;
    
    public List<string> Fruits = new List<string>();
    public Dictionary<string, int> Pets = new Dictionary<string, int>();//key : name , value : num
}