using System;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using Random = UnityEngine.Random;

public class CharacterModel : MonoBehaviour
{
    [SerializeField] List<GameObject> _characterModels;
    [SerializeField] TMP_Text _nameTag;
    [SerializeField] Battler _battler;

    void Awake() => Hide();

    void OnValidate()
    {
        _battler = GetComponent<Battler>();
        _characterModels = GetComponentsInChildren<Animator>(true)
            .Select(t => t.gameObject)
            .ToList();
    }

    public void Hide()
    {
        return;
        foreach (var character in _characterModels)
        {
            _nameTag?.SetText(string.Empty);
            character.SetActive(false);
        }
    }
    

    public void ShowModelForPlayer(string playerName)
    {
        foreach (var character in _characterModels)
            character.SetActive(false);

        var availableCharacters = _characterModels.ToList();

        string modelName = _battler.GetModelName();
        if (string.IsNullOrWhiteSpace(modelName))
        {
	        var index = Random.Range(0, availableCharacters.Count);
            modelName = _characterModels[index].name;
            Players.SetModel(playerName, modelName);
        }


        var characterModel = availableCharacters.FirstOrDefault(t => t.name.ToLowerInvariant() == modelName.ToLowerInvariant());
        if (characterModel == null)
        {
            Debug.LogError($"Unable to set model to {modelName} - using default instead");
            characterModel = availableCharacters.FirstOrDefault();
        }
        characterModel.SetActive(true);

        _nameTag?.SetText(playerName);
    }

    
}