using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using FVS;
using LitJson;

public class DemoStyle : FVSBaseStyle
{
    GameObject cube;
    void Awake()
    {
        cube = GameObject.Find("Cube");
    }

    [FVSGetConfig("cubeColor", "ɫ")]
    public ColorType GetCubeColor()
    {
        var color = cube.GetComponent<MeshRenderer>().sharedMaterial.color;
        return new ColorType(color);
    }

    [FVSSetConfig("cubeColor")]
    public void SetCubeColor(string color)
    {
        Material material = cube.GetComponent<MeshRenderer>().material;
        material.color = BaseUtils.CssColor2UnityColor(color);
    }

    [FVSGetConfig("cubePosition", "λ")]
    public Vector3Type GetPosition()
    {
        Vector3 position = cube.transform.position;
        return new Vector3Type(position);
    }

    [FVSSetConfig("cubePosition")]
    public void SetPosition(string data)
    {
        try
        {
            float[] position = JsonMapper.ToObject<float[]>(data);
            cube.transform.position = new Vector3(position[0], position[1], position[2]);
        }
        catch (Exception e)
        {
            Debug.LogError("Vector3δܽȷֵ" + e);
        }
    }

    [FVSGetConfig("cubeSize", "ߴ")]
    public NumberType GetCubeSize()
    {
        GameObject cube = GameObject.Find("Cube");
        float scale = cube.transform.localScale.x;
        return new NumberType(scale, 1, 20, 0.1f);
    }

    [FVSSetConfig("cubeSize")]
    public void SetCubeSize(string data)
    {
        float size = float.Parse(data);
        cube.transform.localScale = new Vector3(size, size, size);
    }

    [FVSGetConfig("text", "Զ")]
    public TextType GetText()
    {
        GameObject text = GameObject.Find("tmp");
        TMP_Text tmp = text.GetComponent<TMP_Text>();
        return new TextType(tmp.text);
    }

    [FVSSetConfig("text")]
    public void SetText(string content)
    {
        GameObject text = GameObject.Find("tmp");
        TMP_Text tmp = text.GetComponent<TMP_Text>();
        tmp.text = content;
    }

    [FVSGetConfig("visible", "ʾcube")]
    public SelectType GetVisible()
    {
        List<SelectOption> options = new List<SelectOption>();
        options.Add(new SelectOption("ɼ", "true"));
        options.Add(new SelectOption("ɼ", "false"));

        return new SelectType(cube.GetComponent<Renderer>().enabled ? "true" : "false", options);
    }

    [FVSSetConfig("visible")] 
    public void SetVisible(string visible)
    {
        cube.GetComponent<Renderer>().enabled = visible == "true";
    }
}
