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

/// <summary>
/// GAME 1303 Tier 7 — The shape of a save file. Plain data, no MonoBehaviour.
/// Unity's JsonUtility serializes public fields of [System.Serializable] classes, and
/// it does NOT handle Dictionaries — which is why flags and stats are stored as parallel
/// lists of names and values. That's a real limitation worth explaining once.
/// </summary>
[Serializable]
public class SaveData
{
    public string saveVersion = "1";
    public string savedAtUtc = "";
    public string sceneName = "";

    [Header("Flags & counters (Tier 4 ChoiceFlagManager)")]
    public List<string> flags = new List<string>();
    public List<string> counterNames = new List<string>();
    public List<int> counterValues = new List<int>();

    [Header("Collectibles (Tier 1 CollectionTracker)")]
    public List<string> itemNames = new List<string>();
    public List<int> itemCounts = new List<int>();
    public int score;

    [Header("Player")]
    public float playerX, playerY;
    public int playerHealth;
    public bool hasPlayerPosition;

    [Header("Pet (Tier 7)")]
    public List<string> statNames = new List<string>();
    public List<float> statValues = new List<float>();
    public string personalityId = "";

    [Header("Progress")]
    public List<string> clueIds = new List<string>();
    public int experience;

    public DateTime SavedAt
    {
        get
        {
            if (DateTime.TryParse(savedAtUtc, null,
                System.Globalization.DateTimeStyles.RoundtripKind, out var dt)) return dt;
            return DateTime.UtcNow;
        }
    }

    /// <summary>Real-world minutes since this file was written. Cozy Critters uses it.</summary>
    public float MinutesSinceSaved => (float)(DateTime.UtcNow - SavedAt).TotalMinutes;
}