using ModernUO.Serialization;
using System;

namespace Server.Mobiles
{
    [SerializationGenerator(0, false)]
    public partial class Cow : BaseCreature
    {

        [SerializedCommandProperty(AccessLevel.GameMaster)]
        [SerializableField(0)]
        public DateTime _milkedOn;

        [SerializedCommandProperty(AccessLevel.GameMaster)]
        [SerializableField(1)]
        public int _milk;

        [Constructible]
        public Cow() : base(AIType.AI_Animal, FightMode.Aggressor)
        {
            Body = Utility.RandomList(0xD8, 0xE7);
            BaseSoundID = 0x78;

            SetStr(30);
            SetDex(15);
            SetInt(5);

            SetHits(18);
            SetMana(0);

            SetDamage(1, 4);

            SetDamage(1, 4);

            SetDamageType(ResistanceType.Physical, 100);

            SetResistance(ResistanceType.Physical, 5, 15);

            SetSkill(SkillName.MagicResist, 5.5);
            SetSkill(SkillName.Tactics, 5.5);
            SetSkill(SkillName.Wrestling, 5.5);

            Fame = 300;
            Karma = 0;

            VirtualArmor = 10;

            Tamable = true;
            ControlSlots = 1;
            MinTameSkill = 11.1;

            if (Core.AOS && Utility.Random(1000) == 0) // 0.1% chance to have mad cows
            {
                FightMode = FightMode.Closest;
            }
        }

        public override string CorpseName => "a cow corpse";
        public override string DefaultName => "a cow";

        public override int Meat => 8;
        public override int Hides => 12;
        public override FoodType FavoriteFood => FoodType.FruitsAndVeggies | FoodType.GrainsAndHay;

        public override void OnDoubleClick(Mobile from)
        {
            base.OnDoubleClick(from);

            var random = Utility.Random(100);

            if (random < 5)
            {
                Tip();
            }
            else if (random < 20)
            {
                PlaySound(120);
            }
            else if (random < 40)
            {
                PlaySound(121);
            }
        }

        public void Tip()
        {
            PlaySound(121);
            Animate(8, 0, 3, true, false, 0);
        }

        public bool TryMilk(Mobile from)
        {
            if (!from.InLOS(this) || !from.InRange(Location, 2))
            {
                from.SendLocalizedMessage(1080400); // You can not milk the cow from this location.
            }

            if (Controlled && ControlMaster != from)
            {
                from.SendLocalizedMessage(1071182); // The cow nimbly escapes your attempts to milk it.
            }

            if (Milk == 0 && MilkedOn + TimeSpan.FromDays(1) > Core.Now)
            {
                from.SendLocalizedMessage(1080198); // This cow can not be milked now. Please wait for some time.
            }
            else
            {
                if (Milk == 0)
                {
                    Milk = 4;
                }

                MilkedOn = Core.Now;
                Milk--;

                return true;
            }

            return false;
        }
    }
}
