using System;
using UnityEngine;

public class GameManager
{
	public static LevelGroup currentLevelGroup;

	public static Level currentLevel;

	public static bool openLevelSelection;

	public static int CurrentLevelNo
	{
		get
		{
			return PlayerPrefs.GetInt("currentLevelNo", 1);
		}
		set
		{
			SafePlayerPrefs.SetInt("currentLevelNo", value);
		}

	}
    public static int CurrentLevelNo_Timer
    {
        get
        {
            return PlayerPrefs.GetInt("currentLevelNo_Timer", 1);
        }
        set
        {
            SafePlayerPrefs.SetInt("currentLevelNo_Timer", value);
        }
    }

    public static int CurrentLevelGroupIndex
	{
		get
		{
			return PlayerPrefs.GetInt("CurrentLevelGroupIndex", 0);
		}
		set
		{
			SafePlayerPrefs.SetInt("CurrentLevelGroupIndex", value);
		}
	}

	public static bool IsSound
	{
		get
		{
			return PlayerPrefs.GetInt("IsSound", 1) == 1;
		}
		set
		{
			SafePlayerPrefs.SetInt("IsSound", value ? 1 : 0);
		}
	}

	public static bool IsMusic
	{
		get
		{
			return PlayerPrefs.GetInt("IsMusic", 1) == 1;
		}
		set
		{
			SafePlayerPrefs.SetInt("IsMusic", value ? 1 : 0);
		}
	}

	public static int Coin
	{
		get
		{
			return PlayerPrefs.GetInt("Coin", 0);
		}
		set
		{
			SafePlayerPrefs.SetInt("Coin", value);
		}
	}
    public static int PipeIndex
    {
        get
        {
            return PlayerPrefs.GetInt("PipeIndex", 0);
        }
        set
        {
            SafePlayerPrefs.SetInt("PipeIndex", value);
        }
    }
    public static int EffectIndex
    {
        get
        {
            return PlayerPrefs.GetInt("EffectIndex", -1);
        }
        set
        {
            SafePlayerPrefs.SetInt("EffectIndex", value);
        }
    }

    public static int StarLevel
	{
		get
		{
			return PlayerPrefs.GetInt("CurrentStarLevelget", 1);
		}
		set
		{
			SafePlayerPrefs.SetInt("CurrentStarLevelget", value);
		}
	}

	public static float StarLevelProgress => (float)CurrentStar / (float)TotalStar;

	private static int CurrentStar
	{
		get
		{
			return PlayerPrefs.GetInt("CurrentStar", 0);
		}
		set
		{
			SafePlayerPrefs.SetInt("CurrentStar", value);
		}
	}

	private static int TotalStar
	{
		get
		{
			return PlayerPrefs.GetInt("TotalStar", 3);
		}
		set
		{
			SafePlayerPrefs.SetInt("TotalStar", value);
		}
	}

	public static DateTime LastSpin
	{
		get
		{
			return DateTime.FromFileTime(long.Parse(PlayerPrefs.GetString("LastSpinDate", "0")));
		}
		set
		{
			SafePlayerPrefs.SetString("LastSpinDate", value.ToFileTime().ToString());
		}
	}

	public static bool CanSpin => SpinAfter.TotalDays >= 1.0;

	public static TimeSpan SpinAfter => DateTime.Now - LastSpin;

	public static TimeSpan RemandingForSpin => LastSpin.AddDays(1.0) - DateTime.Now;

	public static void AddStar(int s)
	{
		CurrentStar += s;
		if (CurrentStar >= TotalStar)
		{
			CurrentStar %= TotalStar;
			StarLevel++;
			TotalStar = 0;
			for (int i = 1; i <= StarLevel; i++)
			{
				TotalStar += i * 3;
			}
		}
	}
}