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

public class OnlineGameScript : MonoBehaviour {

    // Status color Pending, not your turn, your turn, declined
    List<Color32> statusColors = new List<Color32>() { new Color32(234, 164, 17, 100), new Color32(255, 255, 24, 175), new Color32(0, 255, 0, 100), new Color32(219, 12, 65, 100) };
    public Text gameStatusText;
    public Text gameTitleText;

    private int id;
    private int winNumber;
    private int answerTimer;
    private int roundTimeLimit;
    private string currentPlayer;
    private int round;
    private string startDate;
    private string LastPlayedDate;
    private string finishedDate;

    public int Id { get => id; set => id = value; }
    public int WinNumber { get => winNumber; set => winNumber = value; }
    public int AnswerTimer { get => answerTimer; set => answerTimer = value; }
    public int RoundTimeLimit { get => roundTimeLimit; set => roundTimeLimit = value; }
    public string CurrentPlayer { get => currentPlayer; set => currentPlayer = value; }
    public int Round { get => round; set => round = value; }
    public string StartDate { get => startDate; set => startDate = value; }
    public string LastPlayedDate1 { get => LastPlayedDate; set => LastPlayedDate = value; }
    public string FinishedDate { get => finishedDate; set => finishedDate = value; }
    public string GameStatus {
        get { return gameStatus; }
        set {
            gameStatus = value;
            SetColor(gameStatus);
        }
    }

    private string PENDING = "ONLINE_GAME_STATUS_VALUE_PENDING";
    private string OTHERS_TURN = "ONLINE_GAME_STATUS_VALUE_OTHERS_TURN";
    private string DECLINED = "ONLINE_GAME_STATUS_VALUE_DECLINED";
    private string YOUR_TURN = "ONLINE_GAME_STATUS_VALUE_YOUR_TURN";

    // behövs nog en partialy declined status också, om en av fyra tackar nej kanske man viss spela ändå.
    // behövs också en med dina inbjudningar.

    public string gameStatus;

    // Start is called before the first frame update
    void Start() {
        
    }

    // Update is called once per frame
    void Update() {

    }

    private void SetColor(string status) {
        Image image = this.GetComponent<Image>();
        Debug.Log(status);
        if ("PENDING".Equals(status)) {
            image.color = statusColors[0];
        } else if ("YOUR_TURN".Equals(status)) {
            image.color = statusColors[1];
        } else if ("OTHERS_TURN".Equals(status)) {
            image.color = statusColors[2];
        } else if ("DECLINED".Equals(status)) {
            image.color = statusColors[3];
        } else {
            image.color = new Color32(100, 100, 100, 100);
        }
    }

    public void SetTitleText(string text) {
        gameTitleText.text = text;
    }

    public void SetGameStatusText() {
        SetGameStatusText("");
    }
    public void SetGameStatusText(string extraInfo) {
        if ("PENDING".Equals(GameStatus)) {
            gameStatusText.text = LocalizationManager.Instance.GetText(PENDING);
        } else if ("YOUR_TURN".Equals(GameStatus)) {
            gameStatusText.text = LocalizationManager.Instance.GetText(YOUR_TURN);
        } else if ("OTHERS_TURN".Equals(GameStatus)) {
            string message = LocalizationManager.Instance.GetText(OTHERS_TURN);
            gameStatusText.text = String.Format(message, extraInfo);
        } else if ("DECLINED".Equals(GameStatus)) {
            gameStatusText.text = LocalizationManager.Instance.GetText(DECLINED);
        } else {
            gameStatusText.text = "SOMETHING WRONG WITH STATUS TITLE FROM TEXT " + GameStatus;
        }
    }

    public void SetId(string id) {
        Int32.TryParse(id, out int intId);
        Id = intId;
    }

    public void SetWinNumber(string winNumber) {
        Int32.TryParse(winNumber, out int intWinNumber);
        WinNumber = intWinNumber;
    }

    public void SetAnswerTimer(string answerTimer) {
        Int32.TryParse(answerTimer, out int intAnswerTimer);
        AnswerTimer = intAnswerTimer;
    }

    public void SetRoundTimeLimit(string roundTimeLimit) {
        Int32.TryParse(roundTimeLimit, out int intRoundTimelimit);
        RoundTimeLimit = intRoundTimelimit;
    }

    public void SetRound(string round) {
        Int32.TryParse(round, out int intRound);
        Round = intRound;
    }

    public void SetGameStatus(string status) {
        GameStatus = status;
    }
}
