using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;

namespace PetCompanion.Models
{
    public class PetStats
    {
        [Key, ForeignKey("Pet")]
        public string PetId { get; set; }

        // Display stats
        public int Intelligence { get; set; }
        public int Strength { get; set; }
        public int Charisma { get; set; }

        // Hidden stats (not displayed to the API)
        [JsonIgnore]
        public int Luck { get; set; } // used for rarity of item finds
        [JsonIgnore]
        public int Agility { get; set; } // used for combat
        [JsonIgnore]
        public int Perception { get; set; } // used for number of itens found

        public int MaxIntelligence { get; set; }
        public int MaxStrength { get; set; }
        public int MaxCharisma { get; set; }

        public static PetStats BuildFromClass(PetClass petClass)
        {
            var stats = new PetStats();

            switch (petClass)
            {
                case PetClass.FOREST_SPIRIT:
                    stats.Intelligence = 10;
                    stats.Strength = 5;
                    stats.Charisma = 5;
                    break;
                case PetClass.OCEAN_GUARDIAN:
                    stats.Intelligence = 5;
                    stats.Strength = 10;
                    stats.Charisma = 5;
                    break;
                case PetClass.FIRE_ELEMENTAL:
                    stats.Intelligence = 5;
                    stats.Strength = 5;
                    stats.Charisma = 10;
                    break;
                case PetClass.MYTHICAL_BEAST:
                    stats.Intelligence = 7;
                    stats.Strength = 7;
                    stats.Charisma = 7;
                    break;
                case PetClass.SHADOW_WALKER:
                    stats.Intelligence = 8;
                    stats.Strength = 6;
                    stats.Charisma = 6;
                    break;
                case PetClass.CYBER_PET:
                    stats.Intelligence = 8;
                    stats.Strength = 8;
                    stats.Charisma = 6;
                    break;
                case PetClass.BIO_MECHANICAL:
                    stats.Intelligence = 8;
                    stats.Strength = 6;
                    stats.Charisma = 8;
                    break;
                default:
                    stats.Intelligence = 5;
                    stats.Strength = 5;
                    stats.Charisma = 5;
                    break;
            }

            stats.MaxIntelligence = stats.Intelligence;
            stats.MaxStrength = stats.Strength;
            stats.MaxCharisma = stats.Charisma;

            stats.Luck = 1;
            stats.Agility = 1;
            stats.Perception = 1;

            return stats;
        }
    }
}