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

public enum MovingDefenseMode { none, hide, CannotClick }
public class UIMoveManager : MonoBehaviour
{
    public RectTransform MovePanel;
    public Button MoveOut;
    public Button MoveIn;
    public MoveDir MoveOutDirction;
    public MoveDir MoveInDirction;
    public float MoveTime;
    public float Offset;
    public MovingDefenseMode DefenseMode;
    private UIMove UIMoving;
    private float timmer;
    bool click = false;
    bool MoveOver;
    void Start()
    {
        MoveOut.onClick.AddListener(MoveOut_Click);
        MoveIn.onClick.AddListener(MoveIn_Click);
        SetMoving();
    }
    public void SetMoving()
    {
        if (!MovePanel.GetComponent<UIMove>())
        {
            UIMoving = MovePanel.gameObject.AddComponent<UIMove>();
            UIMoving.SetPos();
        }
        else
        {
            UIMoving = MovePanel.gameObject.GetComponent<UIMove>();
        }
    }
    public void MoveIn_Click()
    {
        UIMoving.AnchorMove(MovePanel, MoveTime, MoveInDirction, Offset);
        switch (DefenseMode)
        {
            case MovingDefenseMode.hide:
                MoveIn.gameObject.SetActive(false);
                MoveOut.gameObject.SetActive(true);
                break;
            case MovingDefenseMode.CannotClick:
                click = true;
                MoveIn.GetComponent<Button>().interactable = false;
                StartCoroutine(WaitForMoveIn(MoveTime));
                break;
            default: break;
        }
    }
    IEnumerator WaitForMoveIn(float time)
    {
        yield return new WaitForSeconds(time);
        if (MoveOver)
        {
            MoveIn.GetComponent<Button>().interactable = true;
            MoveIn.gameObject.SetActive(false);
            MoveOut.gameObject.SetActive(true);
        }
    }
    public void MoveOut_Click()
    {
        UIMoving.AnchorMove(MovePanel, MoveTime, MoveOutDirction, Offset);
        switch (DefenseMode)
        {
            case MovingDefenseMode.hide:
                MoveIn.gameObject.SetActive(true);
                MoveOut.gameObject.SetActive(false);
                break;
            case MovingDefenseMode.CannotClick:
                click = true;
                MoveOut.GetComponent<Button>().interactable = false;
                StartCoroutine(WaitForMoveOut(MoveTime));
                break;
            default: break;
        }
    }

    IEnumerator WaitForMoveOut(float time)
    {
        yield return new WaitForSeconds(time);
        if (MoveOver)
        {
            MoveOut.GetComponent<Button>().interactable = true;
            MoveIn.gameObject.SetActive(true);
            MoveOut.gameObject.SetActive(false);
        }
    }

    void Update()
    {
        if (click)
        {
            timmer += Time.deltaTime;
            if (timmer >= MoveTime)
            {
                MoveOver = true;
                timmer = 0;
                click = false;
            }
        }
    }
}