using UnityEngine;

namespace AlterchaseSDK
{
    [CreateAssetMenu(fileName = "New Enemy Mod", menuName = "Alterchase SDK/Enemy Mod Asset", order = 2)]
    public class EnemyModAsset : ModAsset
    {
        [Header("Enemy Configuration")]
        [SerializeField] private GameObject enemyPrefab;
        [SerializeField] private EnemyTier tier = EnemyTier.Basic;
        [SerializeField] private float maxHealth = 100f;
        [SerializeField] private float moveSpeed = 3.5f;
        [SerializeField] private float attackDamage = 10f;
        [SerializeField] private float attackRange = 2f;
        [SerializeField] private float attackCooldown = 1f;
        [SerializeField] private float detectionRange = 10f;
        [SerializeField] private RuntimeAnimatorController animatorController;
        
        [Header("AI Behavior")]
        [SerializeField] private EnemyBehavior behaviorType = EnemyBehavior.Aggressive;
        [SerializeField] private bool canFly = false;
        [SerializeField] private bool canClimb = false;
        [SerializeField] private float patrolRadius = 5f;

        [Header("Rewards")]
        [SerializeField] private int experienceOnKill = 50;
        [SerializeField] private GameObject[] dropItems;
        [SerializeField] private float dropChance = 0.5f;

        [Header("Audio & VFX")]
        [SerializeField] private AudioClip[] idleSounds;
        [SerializeField] private AudioClip[] attackSounds;
        [SerializeField] private AudioClip[] damageSounds;
        [SerializeField] private AudioClip deathSound;
        [SerializeField] private GameObject deathEffect;

        public GameObject EnemyPrefab => enemyPrefab;
        public EnemyTier Tier => tier;
        public float MaxHealth => maxHealth;
        public float MoveSpeed => moveSpeed;
        public float AttackDamage => attackDamage;
        public float AttackRange => attackRange;
        public float AttackCooldown => attackCooldown;
        public float DetectionRange => detectionRange;
        public RuntimeAnimatorController AnimatorController => animatorController;
        public EnemyBehavior BehaviorType => behaviorType;
        public bool CanFly => canFly;
        public bool CanClimb => canClimb;
        public float PatrolRadius => patrolRadius;
        public int ExperienceOnKill => experienceOnKill;
        public GameObject[] DropItems => dropItems;
        public float DropChance => dropChance;
        public AudioClip[] IdleSounds => idleSounds;
        public AudioClip[] AttackSounds => attackSounds;
        public AudioClip[] DamageSounds => damageSounds;
        public AudioClip DeathSound => deathSound;
        public GameObject DeathEffect => deathEffect;

        public override ModAssetType GetAssetType() => ModAssetType.Enemy;

        public override bool ValidateAsset(out string errorMessage)
        {
            if (enemyPrefab == null)
            {
                errorMessage = "Enemy prefab is not assigned.";
                return false;
            }

            if (string.IsNullOrEmpty(assetName))
            {
                errorMessage = "Enemy name cannot be empty.";
                return false;
            }

            if (maxHealth <= 0f)
            {
                errorMessage = "Max health must be greater than 0.";
                return false;
            }

            if (moveSpeed < 0f)
            {
                errorMessage = "Move speed cannot be negative.";
                return false;
            }

            if (attackDamage < 0f)
            {
                errorMessage = "Attack damage cannot be negative.";
                return false;
            }

            errorMessage = string.Empty;
            return true;
        }
    }

    public enum EnemyTier
    {
        Basic,
        Elite,
        Boss,
        MiniBoss
    }

    public enum EnemyBehavior
    {
        Aggressive,
        Defensive,
        Patrol,
        Stationary,
        Fleeing,
        Support
    }
}
