using UnityEngine;
using UnityEngine.UI;
using TMPro;
namespace BulletHellTemplate
{
public class UpgradeEntry : MonoBehaviour
{
public TextMeshProUGUI upgradeNameText;
public TextMeshProUGUI upgradeCostText;
public TextMeshProUGUI upgradeLevelText;
public Image upgradeIconImage; // Image component for upgrade icon
public Button upgradeButton;
private StatUpgrade statUpgrade;
private CharacterStatsRuntime characterStats; // Alterado para CharacterStatsRuntime
private int currentLevel;
private int characterId;
public string Level = "Level:";
public NameTranslatedByLanguage[] LevelTranslated;
public string MaxLevel = "Max Level";
public NameTranslatedByLanguage[] MaxLevelTranslated;
private string currentLang;
///
/// Initializes the upgrade entry with the given stat upgrade and character stats.
///
/// The stat upgrade data.
/// The character stats to apply the upgrade to.
/// The current level of the upgrade.
/// The ID of the character.
public void Initialize(StatUpgrade upgrade, Sprite upgradeIcon, CharacterStatsRuntime stats, int level, int characterId)
{
currentLang = LanguageManager.LanguageManager.Instance.GetCurrentLanguage();
statUpgrade = upgrade;
characterStats = stats;
currentLevel = level;
this.characterId = characterId;
string _upgradeName = UICharacterMenu.Singleton.GetTranslatedString(upgrade.upgradeNameTranslated, upgrade.upgradeName, currentLang);
string _level = UICharacterMenu.Singleton.GetTranslatedString(LevelTranslated, Level, currentLang);
string _maxLevel = UICharacterMenu.Singleton.GetTranslatedString(MaxLevelTranslated, MaxLevel, currentLang);
upgradeNameText.text = _upgradeName;
upgradeLevelText.text = $"{_level} {currentLevel}/{statUpgrade.upgradeMaxLevel}";
upgradeIconImage.sprite = upgradeIcon; // Set the upgrade icon
UpdateCostText(currentLevel + 1);
upgradeButton.onClick.AddListener(OnUpgradeButtonClick);
if (currentLevel >= statUpgrade.upgradeMaxLevel)
{
upgradeButton.interactable = false;
upgradeCostText.text = _maxLevel;
}
}
///
/// Updates the cost text based on the current level.
///
/// The next level to which the upgrade will be applied.
private void UpdateCostText(int nextLevel)
{
string _maxLevel = UICharacterMenu.Singleton.GetTranslatedString(MaxLevelTranslated, MaxLevel, currentLang);
if (nextLevel > statUpgrade.upgradeMaxLevel)
{
upgradeCostText.text = _maxLevel;
}
else
{
int cost = statUpgrade.GetUpgradeCost(nextLevel);
upgradeCostText.text = $"{cost}";
}
}
///
/// Handles the upgrade button click event.
///
private void OnUpgradeButtonClick()
{
int nextLevel = currentLevel + 1;
int currentCurrency = MonetizationManager.GetCurrency(statUpgrade.currencyTag);
int cost = statUpgrade.GetUpgradeCost(nextLevel);
string _level = UICharacterMenu.Singleton.GetTranslatedString(LevelTranslated, Level, currentLang);
string _maxLevel = UICharacterMenu.Singleton.GetTranslatedString(MaxLevelTranslated, MaxLevel, currentLang);
if (currentCurrency >= cost && currentLevel < statUpgrade.upgradeMaxLevel)
{
currentCurrency -= cost;
MonetizationManager.SetCurrency(statUpgrade.currencyTag, currentCurrency);
statUpgrade.ApplyUpgrade(characterStats, nextLevel);
currentLevel++;
PlayerSave.SaveCharacterUpgradeLevel(characterId, statUpgrade.statType, currentLevel);
upgradeLevelText.text = $"{_level} {currentLevel}/{statUpgrade.upgradeMaxLevel}";
UpdateCostText(currentLevel + 1);
if (currentLevel >= statUpgrade.upgradeMaxLevel)
{
upgradeButton.interactable = false;
upgradeCostText.text = _maxLevel;
}
UICharacterMenu.Singleton.OnCharacterUpgrade.Invoke();
UICharacterMenu.Singleton.tempCharacterModel.onUpgradeCharacter.Invoke();
UICharacterMenu.Singleton.UpdateDetailedStats();
UICharacterMenu.Singleton.DisplayUpgradeSucess();
}
else
{
if(currentLevel >= statUpgrade.upgradeMaxLevel)
{
UICharacterMenu.Singleton.DisplayAlreadyMaxLevel();
}
else
{
UICharacterMenu.Singleton.DisplayNotEnoughCurrency();
}
}
UICharacterMenu.Singleton.LoadCharacterSkills(characterId);
}
}
}