using System.Collections.Generic;
using System.IO;
using UnityEngine;

namespace MLAgents
{
    public class EngineConfigurationChannel : SideChannel
    {

        public override int ChannelType()
        {
            return (int)SideChannelType.EngineSettings;
        }

        public override void OnMessageReceived(byte[] data)
        {
            using (var memStream = new MemoryStream(data))
            {
                using (var binaryReader = new BinaryReader(memStream))
                {
                    var width = binaryReader.ReadInt32();
                    var height = binaryReader.ReadInt32();
                    var qualityLevel = binaryReader.ReadInt32();
                    var timeScale = binaryReader.ReadSingle();
                    var targetFrameRate = binaryReader.ReadInt32();

                    timeScale = Mathf.Clamp(timeScale, 1, 100);

                    Screen.SetResolution(width, height, false);
                    QualitySettings.SetQualityLevel(qualityLevel, true);
                    Time.timeScale = timeScale;
                    Time.captureFramerate = 60;
                    Application.targetFrameRate = targetFrameRate;
                }
            }
        }
    }
}
