using UnityEngine;
using AlterchaseSDK;

public class ExampleModUsage : MonoBehaviour
{
    [Header("Example Mod Package")]
    [SerializeField] private ModPackage examplePackage;

    [Header("Spawn Settings")]
    [SerializeField] private Transform spawnLocation;
    [SerializeField] private float spawnRadius = 5f;

    private void Start()
    {
        if (examplePackage != null)
        {
            LoadExampleMod();
        }
    }

    private void LoadExampleMod()
    {
        bool success = ModLoader.Instance.LoadModPackage(examplePackage);

        if (success)
        {
            Debug.Log($"Successfully loaded mod package: {examplePackage.PackageName}");
            SpawnModContent();
        }
        else
        {
            Debug.LogError("Failed to load mod package!");
        }
    }

    private void SpawnModContent()
    {
        SpawnModels();
        SpawnEnemies();
    }

    private void SpawnModels()
    {
        var models = ModLoader.Instance.GetAllAssetsOfType<ModelModAsset>();

        foreach (var model in models)
        {
            Vector3 randomPos = GetRandomPosition();
            GameObject spawnedModel = ModLoader.Instance.SpawnModel(model, randomPos, Quaternion.identity);

            if (spawnedModel != null)
            {
                Debug.Log($"Spawned model: {model.AssetName}");
            }
        }
    }

    private void SpawnEnemies()
    {
        var enemies = ModLoader.Instance.GetAllAssetsOfType<EnemyModAsset>();

        foreach (var enemy in enemies)
        {
            Vector3 randomPos = GetRandomPosition();
            GameObject spawnedEnemy = ModLoader.Instance.SpawnEnemy(enemy, randomPos, Quaternion.identity);

            if (spawnedEnemy != null)
            {
                Debug.Log($"Spawned enemy: {enemy.AssetName} with {enemy.MaxHealth} HP");
            }
        }
    }

    private Vector3 GetRandomPosition()
    {
        Vector3 basePos = spawnLocation != null ? spawnLocation.position : Vector3.zero;
        Vector2 randomCircle = Random.insideUnitCircle * spawnRadius;
        return basePos + new Vector3(randomCircle.x, 0, randomCircle.y);
    }

    [ContextMenu("Load Custom Level")]
    private void LoadCustomLevel()
    {
        var levels = ModLoader.Instance.GetAllAssetsOfType<LevelModAsset>();

        if (levels.Count > 0)
        {
            LevelModAsset firstLevel = levels[0];
            Debug.Log($"Loading level: {firstLevel.AssetName}");
            ModLoader.Instance.LoadLevel(firstLevel);
        }
        else
        {
            Debug.LogWarning("No custom levels found in loaded mods.");
        }
    }

    [ContextMenu("List All Loaded Mods")]
    private void ListAllLoadedMods()
    {
        var packages = ModLoader.Instance.GetAllLoadedPackages();

        Debug.Log($"Total loaded mod packages: {packages.Count}");

        foreach (var package in packages)
        {
            Debug.Log($"- {package.PackageName} v{package.Version} by {package.AuthorName}");
            Debug.Log($"  Contains: {package.Levels.Count} levels, {package.Models.Count} models, {package.Enemies.Count} enemies");
        }
    }
}
