using AlienAttack.MonoGame.Things.Bullets;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace AlienAttack.MonoGame.Things.Enemies;

public class RedEnemy : EnemyShip
{
    protected int FireThreshold => 20;
    protected int CurrentFireThreshold { get; set; } = 20;
    protected override int Health { get; set; } = 5;

    public RedEnemy(int x, int y) : base(x, y)
    {
        BoundBox = new Rectangle(0, 0, 64, 64);
        YVelocity = 1.5f;
    }

    public override void Draw(SpriteDrawArgs args)
    {
        int frame = XVelocity > 0 ? 2 : XVelocity < 0 ? 3 : 1;
        SpriteEffects spriteEffects = XVelocity > 0 ? SpriteEffects.FlipHorizontally : SpriteEffects.None;
        Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Enemy01_Red_Frame_{frame}_png_processed");
        //SpriteEffects spriteEffects = SpriteEffects.None;

        //args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, new Vector2(0, 0), 1, spriteEffects, 1);
        args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, Origin, 1, spriteEffects, 1);

        base.Draw(args);
    }

    protected override void TryMove(SpriteUpdateContext context)
    {
        //YPosition += 2;
        //if (YPosition > context.ViewTransform.ScreenHeight / 5 - BoundBox.Y / 2)
        //{
        //    if (YPosition < context.ViewTransform.ScreenHeight / 2 - BoundBox.Y / 2)
        //    {
        //        if (XPosition < context.ViewTransform.ScreenWidth / 2)
        //        {
        //            XVelocity = 2;
        //        }
        //        else if (XPosition > context.ViewTransform.ScreenWidth / 2)
        //        {
        //            XVelocity = -2;
        //        }
        //    }
        //    else
        //    {
        //        XVelocity = 0;
        //    }
        //}
    }

    protected override void TryFire(SpriteUpdateContext context)
    {
        if (CurrentFireThreshold > 0)
        {
            CurrentFireThreshold--;
        }

        if (CurrentFireThreshold == 0 && context.Random.Next(0, 50) == 1)
        {
            float originX = XPosition + (BoundBox.Width / 2) - (7 / 2);

            context.SpawnSprite(new MinigunBulletSmall(originX - 9, YPosition + BoundBox.Height - 12, -1, 2 + YVelocity, this));
            context.SpawnSprite(new MinigunBulletSmall(originX + 3, YPosition + BoundBox.Height - 12, 0, 2 + YVelocity, this));
            context.SpawnSprite(new MinigunBulletSmall(originX + 14, YPosition + BoundBox.Height - 12, 1, 2 + YVelocity, this));

            CurrentFireThreshold = FireThreshold;

            context.AudioManager.PlayEnemyFire();
        }
    }
}