using System.Collections.Generic;
using UnityEngine;
using Articy.Unity;
using Articy.Touhou;
namespace Game
{
    /// 
    /// 剧情管理
    /// 
    public class DramaManager : ManagerBase
    {
        private GameObject _dramaRoot;
        private ArticyFlowPlayer _articyFlowPlayer;
        private DramaFlowPlayer _flowPlayer;
        public DramaManager()
        {
        }
        public override void OnCreate()
        {
            Object.DontDestroyOnLoad(GameObject.Find("FlowRoot"));
            _dramaRoot = GameObject.Find("FlowRoot/DramaRoot");
            _articyFlowPlayer = _dramaRoot.GetComponent();
            _flowPlayer = _dramaRoot.GetComponent();
            _dramaRoot.SetActive(false);
        }
        public override void Update()
        {
        }
        public override void OnDestroy()
        {
            Object.DestroyImmediate(_dramaRoot);
        }
        public void StartDrama(string dramaId)
        {
            if (_dramaRoot.activeSelf)
            {
                return;
            }
            var dialog = ArticyDatabase.GetObject(dramaId);
            if (dialog == null)
            {
                Util.Print("剧情不存在:", dramaId);
                return;
            }
            Util.EntityStopMove(Util.GetMasterID());
            UIManager.Instance.Open(EuiPage.Drama);
            _articyFlowPlayer.StartOn = dialog;
            _dramaRoot.SetActive(true);
        }
        public void EndDrama()
        {
            _dramaRoot.SetActive(false);
            SendDialogEnd();
        }
        public void NextDrama()
        {
            _flowPlayer.NextDrama();
        }
        public void NextDramaChoice(int index)
        {
            _flowPlayer.NextDramaChoice(index);
        }
        public void SendDialog(string name, string content, ArticyObject icon)
        {
            var param = new PDialog()
            {
                Name = name,
                Content = content,
                Pic = icon,
            };
            EventManager.Instance.SendEvent(EEvent.Dialog, param);
        }
        public void SendDialogChoice(List choices)
        {
            var param = new PDialogChoice()
            {
                Choices = choices,
            };
            EventManager.Instance.SendEvent(EEvent.DialogChoice, param);
        }
        private void SendDialogEnd()
        {
            EventManager.Instance.SendEvent(EEvent.DialogEnd);
        }
    }
    public abstract partial class Util
    {
        public static void StartDrama(string dramaId)
        {
            DramaManager.Instance.StartDrama(dramaId);
        }
        public static void EndDrama()
        {
            DramaManager.Instance.EndDrama();
        }
        public static void NextDrama()
        {
            DramaManager.Instance.NextDrama();
        }
        public static void NextDramaChoice(int index)
        {
            DramaManager.Instance.NextDramaChoice(index);
        }
        public static void SendDialog(string name, string content, ArticyObject icon)
        {
            DramaManager.Instance.SendDialog(name, content, icon);
        }
        public static void SendDialogChoice(List choices)
        {
            DramaManager.Instance.SendDialogChoice(choices);
        }
    }
}