﻿using Lovense.UnityKit.Dongle;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PatternPanel : MonoBehaviour
{

    [SerializeField]
    public Toggle vibrateFg, ratoteFg, pumpFg, thrustFg, fingerFg, suctionFg;

    [SerializeField]
    public Slider timeSecPSlider, oneTimeSlider;

    [SerializeField]
    public SliderItem addPatternObj;
    [SerializeField]
    public Transform patternContent;

    Func<List<string>> getToysCallback;
    List<SliderItem> addPatternList = new List<SliderItem>();




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

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

    public void SetGetToysCallback(Func<List<string>> arg0)
    {
        getToysCallback = arg0;
    }

    public void AddPattern()
    {
        if (addPatternList.Count >= 50)
        {
            Debug.LogError("must be less than 50");
            return;
        }
        SliderItem newPattern = Instantiate(addPatternObj, patternContent);
        addPatternList.Add(newPattern);
        newPattern.gameObject.SetActive(true);
        newPattern.transform.SetSiblingIndex(patternContent.childCount - 2);
    }

    public void SubPattern()
    {
        if (addPatternList.Count != 0)
        {
            SliderItem newPattern = addPatternList[addPatternList.Count - 1];
            newPattern.transform.SetParent(null);
            Destroy(newPattern);
            addPatternList.RemoveAt(addPatternList.Count - 1);
        }
    }

    public void ClickOnSendPattern()
    {
        List<LovenseCommandType> types = new List<LovenseCommandType>();
        if (vibrateFg.isOn)
        {
            types.Add(LovenseCommandType.VIBTATE);
        }
        if (ratoteFg.isOn)
        {
            types.Add(LovenseCommandType.ROTATE);
        }
        if (pumpFg.isOn)
        {
            types.Add(LovenseCommandType.PUMP);
        }
        if (thrustFg.isOn)
        {
            types.Add(LovenseCommandType.THRUSTRING);
        }
        if (fingerFg.isOn)
        {
            types.Add(LovenseCommandType.FINGERING);
        }
        if (suctionFg.isOn)
        {
            types.Add(LovenseCommandType.SUCTION);
        }
        float timeSec = timeSecPSlider.value;
        int intervalsMs = (int)oneTimeSlider.value;
        List<int> values = new List<int>();
        for (int i = 0; i < addPatternList.Count; i++)
        {
            values.Add(addPatternList[i].GetValue());
        }
        List<string> toys = getToysCallback();
        LovenseDongleTools.GetInstance().SendPattern(toys, types, values, timeSec, intervalsMs);
    }

}
