using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;



public class BattleSystem : MonoBehaviour
{

    public GameObject playerPrefab;
    public GameObject enemyPrefab;

    public Transform playerBattleStation;
    public Transform enemyBattleStation;

    public Text dialogueText;

    //need to store playerGO in a unit variable
    Unit playerUnit;
    Unit enemyUnit;

    public AdventureHUD playerHUD;
    public AdventureHUD enemyHUD;

    public GameObject attackButton;


    //on start
    void Start() {
        dialogueText.text = "Press Start!";
        StartCoroutine(SetupBattle());
   // }
    //public OnClick() {
        StartCoroutine(PlayerTeam());
        StartCoroutine(EnemyTeam());
    }


    IEnumerator SetupBattle() {
        //a reference to the thing we're spawning in by adding a GameObject
        GameObject playerGO = Instantiate(playerPrefab, playerBattleStation);
        playerUnit = playerGO.GetComponent<Unit>();

        GameObject enemyGO = Instantiate(enemyPrefab, enemyBattleStation);
        enemyUnit = enemyGO.GetComponent<Unit>();

        playerHUD.SetHUD(playerUnit);
        enemyHUD.SetHUD(enemyUnit);
        Debug.Log("setup working");

        yield return new WaitForSeconds(1f);

        //StartCoroutine(PlayerTeam());
        //StartCoroutine(EnemyTeam());
    }

    IEnumerator EnemyTeam() {
        while (true) {
            //  dialogueText.text = enemyUnit.unitName + " attacks!";

            yield return new WaitForSeconds(Random.Range(.1f, 1f));

            bool isDead = playerUnit.TakeDamage(enemyUnit.damage);

            playerHUD.SetHP(playerUnit.currentHP);

            yield return new WaitForSeconds(Random.Range(.1f, 1f));
            Debug.Log("enemyteam working");

            if (isDead) {
                dialogueText.text = "you won!";
                enemyHUD.SetHP(enemyUnit.maxHP);
                playerHUD.SetHP(playerUnit.maxHP);
            } else {
                StartCoroutine(EnemyTeam());
            }
        }

        
    }

IEnumerator PlayerTeam() {
    while (true) {

        yield return new WaitForSeconds(Random.Range(.1f, 1f));

        bool isDead = enemyUnit.TakeDamage(playerUnit.damage);

        enemyHUD.SetHP(enemyUnit.currentHP);

        yield return new WaitForSeconds(Random.Range(.1f, 1f));
        Debug.Log("playerteam working"); 

        if (isDead) {
            dialogueText.text = "you dead!";
            enemyHUD.SetHP(enemyUnit.maxHP);
            playerHUD.SetHP(playerUnit.maxHP);
        } else {
            StartCoroutine(PlayerTeam()); }

    }
}