using HighlightPlus;
using Oculus.Interaction;
using Oculus.Interaction.HandGrab;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class FlowInteractionHandler : MonoBehaviour
{

    [SerializeField] Transform mainCanvas;
    public PracticeMode practiceMode;
    public EvaluationMode evaluationMode;
    public ChapterModeController chapterModeController;
    bool oilSamplePickeed = false;
    bool waterSamplePicked = false;
    bool gasSamplePicked = false;
    [SerializeField] Transform sampleParent;
    [SerializeField] Vector3 oilsamplePos;
    [SerializeField] Vector3 gassamplePos;
    [SerializeField] Vector3 watersamplePos;

    [Space(10)]
    [SerializeField] GameObject Oilsample;
    [SerializeField] GameObject Gassample;
    [SerializeField] GameObject watersample;

    [SerializeField] List<GameObject> labtriggers;
    public Image cylinderFill;
    int sampleCount = 0;



    public void StartFill(float time)
    {
        StartCoroutine(HandleFill(time));
    }

    IEnumerator HandleFill(float time)
    {
        float elapsed = 0f;
        float startFill = cylinderFill.fillAmount;
        float targetFill = 1f; // or 0.98f if you want to stop early

        while (elapsed < time)
        {
            elapsed += Time.deltaTime;
            float t = elapsed / time;

            cylinderFill.fillAmount = Mathf.Lerp(startFill, targetFill, t);

            yield return null;
        }

        cylinderFill.fillAmount = targetFill;
        practiceMode.NextStep(true);
    }
    public void DeliverSample()
    {

        if (sampleCount == 0)
        {
            watersample.GetComponent<Collider>().enabled = true;
            watersample.GetComponent<Grabbable>().enabled = true;
            watersample.GetComponent<TriggerObject>().enabled = true;
            HighlightManager.EnableHighlight(watersample.GetComponentInChildren<HighlightEffect>().gameObject);
            watersample.GetComponentInChildren<HandGrabInteractable>().enabled = true;
            labtriggers[sampleCount].SetActive(true);
            sampleCount++;
        }
        else if (sampleCount == 1)
        {
            Oilsample.GetComponent<Collider>().enabled = true;
            Oilsample.GetComponent<Grabbable>().enabled = true;
            Oilsample.GetComponent<TriggerObject>().enabled = true;
            HighlightManager.EnableHighlight(Oilsample.GetComponentInChildren<HighlightEffect>().gameObject);
            Oilsample.GetComponentInChildren<HandGrabInteractable>().enabled = true;
            labtriggers[sampleCount].SetActive(true);
            sampleCount++;
        }
        else if (sampleCount == 2)
        {
            Gassample.GetComponent<Collider>().enabled = true;
            Gassample.GetComponent<Grabbable>().enabled = true;
            Gassample.GetComponent<TriggerObject>().enabled = true;
            HighlightManager.EnableHighlight(Gassample.GetComponentInChildren<HighlightEffect>().gameObject);
            Gassample.GetComponentInChildren<HandGrabInteractable>().enabled = true;
            labtriggers[sampleCount].SetActive(true);
            sampleCount++;
        }
        else
        {
            practiceMode.NextStep(true);
        }
    }
    private void Start()
    {
        oilsamplePos = Oilsample.transform.localPosition;
        gassamplePos = Gassample.transform.localPosition;
        watersamplePos = watersample.transform.localPosition;
        sampleCount = 0;
    }
    public void nextStepAuto()
    {
        if (chapterModeController.currentChapterMode == ChapterType.Practice)
            practiceMode.NextStep(true);
        else if (chapterModeController.currentChapterMode == ChapterType.Evaluation)
            evaluationMode.NextStep(true);
    }

    public void OnOilSampleSealed()
    {
        Oilsample.transform.SetParent(sampleParent);
        Oilsample.transform.SetLocalPositionAndRotation(oilsamplePos, Quaternion.Euler(new Vector3(0, 90, 0)));
    }
    public void OnGasSampleSealed()
    {
        Gassample.transform.SetParent(sampleParent);
        Gassample.transform.SetLocalPositionAndRotation(gassamplePos, Quaternion.Euler(new Vector3(0, 0, 90)));
    }


    public void OnWaterSampleSealed()
    {
        watersample.transform.SetParent(sampleParent);
        watersample.transform.SetLocalPositionAndRotation(watersamplePos, Quaternion.Euler(new Vector3(0, 90, 0)));

    }
    public void OilSamplePicked()
    {
        if (!oilSamplePickeed)
        {
            oilSamplePickeed = true;
            practiceMode.NextStep(true);
        }

    }

    public void WaterSamplePicked()
    {
        if (!waterSamplePicked)
        {
            waterSamplePicked = true;
            practiceMode.NextStep(true);
        }
    }

    public void GasSamplePicked()
    {
        if (!gasSamplePicked)
        {
            gasSamplePicked = true;
            practiceMode.NextStep(true);
        }
    }
    public void SetMainCanvasPose(Transform target)
    {
        mainCanvas.SetPositionAndRotation(target.position, target.rotation);
    }

}
