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

public class ModeController : MonoBehaviour
{
    //public enum Mode { Player, Editor};
    //public Mode mode = Mode.Player;
    public GameObject Player;
    public GameObject Locations;
    public GameObject Editor;
    public GameObject EditorTools;
    public GameObject Plane;
    public GameObject Grid;
    public GameObject LineX;
    public GameObject LineY;
    public GameObject Markers;
    public GameObject Beacons;
    public GameObject Walls;
    public GameObject WallCursor;
    public GameObject Zones;

    Transform maps;

    public static bool editor = false;
    Button button;

    Dropdown.OptionData item;

    // Start is called before the first frame update
    void Start()
    {
        button = gameObject.GetComponent<Button>();
        button.onClick.AddListener(() => {
            Switch();
        });

        if (editor) EditorMode();

        maps = Player.transform.Find("Dropdown_maps");
    }

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

    public void Switch()
    {
        editor = !editor;
        transform.GetChild(0).gameObject.SetActive(!editor);
        transform.GetChild(1).gameObject.SetActive(editor);

        if (editor)
        {
            Player.GetComponent<PlayerController>().StopProgress();
            EditorMode();
        }
        else PlayerMode();
    }

    void PlayerMode()
    {
        Player.SetActive(true);
        //Locations.SetActive(true);
        Markers.SetActive(true);
        //Beacons.SetActive(true);
        Editor.SetActive(false);
        EditorTools.SetActive(false);
        Plane.SetActive(false);
        Grid.SetActive(false);
        Walls.SetActive(false);
        Zones.SetActive(false);

        Destroy(GameObject.Find("SizeX"));
        Destroy(GameObject.Find("SizeY"));

        maps.transform.SetParent(Player.transform);
        maps.transform.SetSiblingIndex(1);
        maps.GetComponent<RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 200);
        if(item != null)maps.GetComponent<Dropdown>().options.Remove(item);
        maps.GetComponent<Dropdown>().value = 0;

        for (int i = 0; i < Beacons.transform.childCount; i++)
        {
            Beacons.transform.GetChild(i).GetComponent<BeaconController>().mode = BeaconController.Mode.Player;
            Beacons.transform.GetChild(i).GetComponent<LabelObjectScript>().enabled = true;
        }

        WallCursor.SetActive(false);

        GameObject old_button = null;
        switch (WallCreate.mode)
        {
            case WallCreate.Mode.Cursor:
                old_button =EditorTools.transform.GetChild(0).gameObject;
                break;
            case WallCreate.Mode.Room:
                old_button = EditorTools.transform.GetChild(1).gameObject;
                break;
            case WallCreate.Mode.Wall:
                old_button = EditorTools.transform.GetChild(2).gameObject;
                break;
        }

        if (old_button != null) old_button.GetComponent<Image>().color = Color.white;

        //PlayerController.markers = new List<Marker>();
        //client.SendGetUsers((uint)PlayerController.active_company + 1);

        //PlayerController.Beacons = new List<Beacon>(); 
        //client.BeaconsRequest((uint)PlayerController.locations[DropdownLocation.value].id);
    }

    void EditorMode()
    {
        Player.SetActive(false);
        //Locations.SetActive(false);
        Markers.SetActive(false);
        //Beacons.SetActive(false);
        Editor.SetActive(true);
        EditorTools.SetActive(true); 
        Plane.SetActive(true);
        Grid.SetActive(true);
        Walls.SetActive(true);
        Zones.SetActive(true);

        maps.transform.SetParent(Editor.transform);
        maps.transform.SetSiblingIndex(0);
        maps.GetComponent<RectTransform>().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 190);
        item = new Dropdown.OptionData("Новая локация");
        maps.GetComponent<Dropdown>().options.Add(item);

        for (int i = 0; i < Beacons.transform.childCount; i++)
        { 
            Beacons.transform.GetChild(i).GetComponent<BeaconController>().info = false;
            Beacons.transform.GetChild(i).GetComponent<BeaconController>().mode = BeaconController.Mode.Editor;     
            Beacons.transform.GetChild(i).GetComponent<LabelObjectScript>().enabled = false;                
        }

        var color = new Color();
        ColorUtility.TryParseHtmlString("#C8C8C8", out color);
        EditorTools.transform.GetChild(0).gameObject.GetComponent<Image>().color = color;

        //foreach (var m in PlayerController.markers)
        //{
        //    Destroy(m.marker.gameObject);
        //    Destroy(m.marker_line.gameObject);
        //    Destroy(m.toggle.gameObject);
        //}
        //PlayerController.markers.Clear();

        //foreach (var b in PlayerController.Beacons)
        //{
        //    Destroy(b.beacon);
        //    Destroy(b.button);
        //}
        //PlayerController.Beacons.Clear();

    }
}
