using System;
using System.Globalization;
using System.Threading;
using System.Windows.Forms;

namespace TweetDuck.Video{
    static class Program{
        internal const string Version = "1.4.2";

        // referenced in VideoPlayer
        // set by task manager -- public const int CODE_PROCESS_KILLED = 1;
        public const int CODE_INVALID_ARGS = 2;
        public const int CODE_LAUNCH_FAIL = 3;
        public const int CODE_MEDIA_ERROR = 4;
        public const int CODE_OWNER_GONE = 5;
        public const int CODE_USER_REQUESTED = 6;

        [STAThread]
        private static int Main(string[] args){
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            NativeMethods.SetProcessDPIAware();

            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;

            IntPtr ownerHandle;
            int ownerDpi;
            int defaultVolume;
            string videoUrl;
            string pipeToken;

            try{
                ownerHandle = new IntPtr(int.Parse(args[0], NumberStyles.Integer));
                ownerDpi = int.Parse(args[1], NumberStyles.Integer);
                defaultVolume = int.Parse(args[2], NumberStyles.Integer);
                videoUrl = new Uri(args[3], UriKind.Absolute).AbsoluteUri;
                pipeToken = args[4];
            }catch{
                return CODE_INVALID_ARGS;
            }

            try{
                Application.Run(new FormPlayer(ownerHandle, ownerDpi, defaultVolume, videoUrl, pipeToken));
            }catch(Exception e){
                Console.Out.WriteLine(e);
                return CODE_LAUNCH_FAIL;
            }

            return 0;
        }
    }
}