﻿using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;

namespace lizscript
{
    [UdonBehaviourSyncMode(BehaviourSyncMode.None)]
    public class UnlockObjects : UdonSharpBehaviour
    {
        [SerializeField,Header("Unlock対象のオブジェクト(強制的にActiveになります)")]
        private GameObject[] targetObjects;
        [SerializeField,Header("素通しするプレイヤーの名前")]
        private string[] adminPlayersName;
        [SerializeField,Range(2,20),Header("Unlockするインタラクト回数(この倍数で開きます)")]
        private int numberOfUnlock = 3;

        private bool isAdmin = false;
        private int interactCount = 0;

        // 開始時、名前がリストにあればAdmin(素通し)モードに
        void Start()
        {
            targetsSetActive(true);
            string name = Networking.LocalPlayer.displayName;
            foreach (string i in adminPlayersName) {
                if (i == name) {
                    isAdmin = true;
                    targetsSetActive(false);
                }
            }
        }

        // Adminじゃない場合、インタラクト回数が解錠回数の倍数なら解除する
        public override void Interact()
        {
            if (!isAdmin) {
                interactCount++;
                targetsSetActive(interactCount % numberOfUnlock != 0);
            } else {
                // 後々の拡張用に念のため
                targetsSetActive(false);
            }
        }

        private void targetsSetActive(bool val)
        {
            foreach (GameObject i in targetObjects) {
                i.SetActive(val);
            }
        }
    }
}
