using UnityEngine;
using System.Collections;

public class FenteTelescope : InteractableObject {

    public static bool isInTelescope = false;

    private static Camera mainCamera = null;

    private static Camera CameraTelescope;

    private static GameObject invisibleGo = null;

    private const float distancePlan = -40f;

    private static GameObject Shrooms = null;

    public static bool havePiece = false;

    [SerializeField] private float moveSpeed = 5;

    protected override void Start() {
        base.Start();
        mainCamera = Camera.main; // On récupère la main Camera pour l'activer/désactiver à loisir
        CameraTelescope = transform.parent.GetComponentInChildren<Camera>(); // On récupère la caméra du téléscope pour l'activer/désactiver à loisir
        invisibleGo = new GameObject("InvisibleGO"); // On crée un objet vide que le joueur va déplacer et que la caméra du téléscope va regarder
        invisibleGo.transform.parent = transform; // On le met enfant de la fente du téléscope

        if (Application.loadedLevelName == "MainScene_3") {
            Shrooms = GameObject.Find("Shrooms");
            Shrooms.SetActive(false);
        }

    }

    protected override void DoActionDown() {
        if (havePiece) {
            SoundManager.PlaySound("piece");
            havePiece = false;
            SetTelescopeMode(true); // On a cliqué sur la fente du téléscope, on passe en mode téléscope
            invisibleGo.transform.position = transform.position + distancePlan * transform.forward; // On reset la position de l'objet invisible
            if (Application.loadedLevelName == "MainScene_3") {
                Shrooms.SetActive(true);
            }
        }
    }

    protected override void Update() {
        if (!isInTelescope) {
            base.Update();
        } else {
            // Le joueur déplace l'objet vide
            invisibleGo.transform.Translate(Input.GetAxis("Horizontal") * Vector3.forward * moveSpeed * Time.deltaTime + Input.GetAxis("Vertical") * Vector3.up * moveSpeed * Time.deltaTime);
            CameraTelescope.transform.LookAt(invisibleGo.transform); // La caméra regarde l'objet vide
            if (Input.GetButtonDown("Jump") || Input.GetButtonDown("Action")) {
                SetTelescopeMode(false); // Si on veut sauter ou utiliser la touche Action, on sort du téléscope
            }
        }
    }

    void SetTelescopeMode(bool isTelescoping) {
        mainCamera.enabled = !isTelescoping; // Si on rentre en mode téléscope, on désactive la main camera...
        CameraTelescope.enabled = isTelescoping; // Pour activer la caméra du téléscope !
        isInTelescope = isTelescoping; // On enregistre le changement de mode
    }
}