using System.Collections;
using System.Collections.Generic;
using System;
using System.IO;
using UnityEngine;
using RenderHeads.Media.AVProMovieCapture;
public class ScreenCaptureManager : MonoBehaviour
{
    public static ScreenCaptureManager instance;
    public CaptureBase m_Capture;
    public CaptureFromScreen captureFromScreen;
    private string m_FileNamePrefix;
    public string m_FilePath;
    void Awake()
    {
        instance = this;
    }
    // Start is called before the first frame update
    void Start()
    {
        CaptureInit();
    }
    /// 
    /// 设置视频格式
    /// 
    public void CaptureInit()
    {
        m_Capture = GameObject.Find("ScreenCapture").GetComponent();
        captureFromScreen = GameObject.Find("ScreenCapture").GetComponent();
        m_Capture._useMediaFoundationH264 = true;
        m_Capture._autoFilenameExtension = "mp4";
        string[] strList = File.ReadAllLines(Application.streamingAssetsPath + "/VideoPlayBackConfig.ini");
        if (strList.Length != 0)
        {
            m_Capture._downScale = (CaptureBase.DownScale)Enum.Parse(typeof(CaptureBase.DownScale), strList[1].Split('=')[1].Trim());
            string str = strList[3].Split('=')[1];
            int x = int.Parse(str.Split('*')[0]);
            int y = int.Parse(str.Split('*')[1]);
            m_Capture._maxVideoSize = new Vector2(x, y);
            m_Capture._frameRate = CaptureBase.FrameRate.Ten;
        }
    }
    public void StartCapture(string path, string videoMame)
    {
        m_Capture._outputFolderPath = path;
        m_Capture._autoFilenamePrefix = videoMame;
        if (!m_Capture.IsCapturing())
        {
            m_FilePath = path;//m_Capture.LastFilePath;
            m_Capture.StartCapture();
        }
    }
    public void PauseCapture()
    {
        m_Capture.PauseCapture();
    }
    public void ResumeCapture()
    {
        m_Capture.ResumeCapture();
    }
    public void StopCapture()
    {
        if (m_Capture != null && m_Capture.IsCapturing())
        {
            m_Capture.StopCapture();
        }
    }
    /// 
    /// 设置输出视频前缀
    /// 
    private void FilenamePrefix(string traintype, string shiptype, string subjectname, string user)
    {
        m_FileNamePrefix = string.Format("${0}${1}${2}${3}$", traintype, shiptype, subjectname, user);
        //m_Capture._autoFilenamePrefix = string.Format("${0}${1}${2}${3}$", traintype,shiptype,subjectname, user);
        m_Capture._autoFilenamePrefix = m_FileNamePrefix;
    }
    /// 
    /// 输出文件路径
    /// 
    private void FolderPath()
    {
        string date = string.Format("{0}_{1}_{2}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
        m_Capture._outputFolderPath = Path.Combine("ScreenCaptures", date);
    }
    private void OnDestroy()
    {
        StopCapture();
    }
    [ContextMenu("Start ScreenShoot")]
    private void StartScreenShoot()
    {
        string[] str = m_FilePath.Split('\\');
        string fileName = str[str.Length - 1].Split('.')[0];
        string date = string.Format("{0}_{1}_{2}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
        string projectFolder = Path.GetFullPath(Path.Combine(Application.dataPath, "..", "PrintScreens", date));
        if (!Directory.Exists(projectFolder))
            Directory.CreateDirectory(projectFolder);
        StartCoroutine(ScreenShoot(Path.Combine(projectFolder, fileName + ".png")));
    }
    private IEnumerator ScreenShoot(string filePath)
    {
        yield return new WaitForEndOfFrame();
        RenderTexture rt = new RenderTexture(Screen.width, Screen.height, 24);
        Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
        Camera ca = GameObject.FindGameObjectWithTag("ThirdCamera").GetComponent();
        ca.targetTexture = rt;
        ca.Render();
        ca.targetTexture = null;
        RenderTexture.active = rt;
        screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        ca.targetTexture = null;
        RenderTexture.active = null;
        Destroy(rt);
        yield return 0;
        byte[] bytes = screenShot.EncodeToPNG();
        File.WriteAllBytes(filePath, bytes);
    }
}