private void cbTaskList_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (cbTaskList.SelectedItem.ToString())
            {
            case "Donut":
            {
                DonutControl donutControl = new DonutControl();
                SuspendLayout();
                plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                donutControl.Location   = TaskControlLocation;
                donutControl.Name       = "taskControl";
                donutControl.DataValid += DonutControl_DataValid;
                plUserControl.Controls.Add(donutControl);
                ResumeLayout();
            }
            break;

            case "Pie":
            {
                PieControl pieControl = new PieControl();
                SuspendLayout();
                plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                pieControl.Location   = TaskControlLocation;
                pieControl.Name       = "taskControl";
                pieControl.DataValid += PieControl_DataValid;
                plUserControl.Controls.Add(pieControl);
                ResumeLayout();
            }
            break;

            case "Elbow":
            {
                ElbowControl elbowControl = new ElbowControl();
                SuspendLayout();
                plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                elbowControl.Location   = TaskControlLocation;
                elbowControl.Name       = "taskControl";
                elbowControl.DataValid += ElbowControl_DataValid;
                plUserControl.Controls.Add(elbowControl);
                ResumeLayout();
            }
            break;

            case "Landrun":
            {
                LandRunControl landrunControl = new LandRunControl();
                SuspendLayout();
                plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                landrunControl.Location   = TaskControlLocation;
                landrunControl.Name       = "taskControl";
                landrunControl.DataValid += LandrunControl_DataValid;
                plUserControl.Controls.Add(landrunControl);
                ResumeLayout();
            }
            break;
            }
        }
        private void lbTaskList_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (lbTaskList.SelectedItem)
            {
            case DonutTask donut:
            {
                DonutControl donutControl = new DonutControl(donut);
                SuspendLayout();
                plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                donutControl.Location   = TaskControlLocation;
                donutControl.Name       = "taskControl";
                donutControl.DataValid += DonutControl_DataValid;
                plUserControl.Controls.Add(donutControl);
                ResumeLayout();
            }
            break;

            case PieTask pie:
            {
                PieControl pieControl = new PieControl(pie);
                SuspendLayout();
                plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                pieControl.Location   = TaskControlLocation;
                pieControl.Name       = "taskControl";
                pieControl.DataValid += PieControl_DataValid;
                plUserControl.Controls.Add(pieControl);
                ResumeLayout();
            }
            break;

            case ElbowTask elbow:
            {
                ElbowControl elbowControl = new ElbowControl(elbow);
                SuspendLayout();
                plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                elbowControl.Location   = TaskControlLocation;
                elbowControl.Name       = "taskControl";
                elbowControl.DataValid += ElbowControl_DataValid;
                plUserControl.Controls.Add(elbowControl);
                ResumeLayout();
            }
            break;

            case LandRunTask landRun:
            {
                LandRunControl landrunControl = new LandRunControl(landRun);
                SuspendLayout();
                plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                landrunControl.Location   = TaskControlLocation;
                landrunControl.Name       = "taskControl";
                landrunControl.DataValid += LandrunControl_DataValid;
                plUserControl.Controls.Add(landrunControl);
                ResumeLayout();
            }
            break;
            }
        }
        private void btImportTask_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.DefaultExt  = "json";
            openFileDialog.Filter      = "json files(*.json) | *.json";
            openFileDialog.FilterIndex = 1;
            if (!string.IsNullOrWhiteSpace(tbCompetitionFolder.Text))
            {
                openFileDialog.InitialDirectory = tbCompetitionFolder.Text;
            }
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if (openFileDialog.FileName.Contains("(Donut)"))
                    {
                        string jsonString = File.ReadAllText(openFileDialog.FileName);
                        //DonutTask donut = JsonSerializer.Deserialize<DonutTask>(jsonString);
                        DonutTask donut = JsonConvert.DeserializeObject <DonutTask>(jsonString, new JsonSerializerSettings()
                        {
                            TypeNameHandling = TypeNameHandling.Auto
                        });
                        DonutControl donutControl = new DonutControl(donut);
                        SuspendLayout();
                        plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                        donutControl.Location   = TaskControlLocation;
                        donutControl.Name       = "taskControl";
                        donutControl.DataValid += DonutControl_DataValid;
                        plUserControl.Controls.Add(donutControl);
                        ResumeLayout();
                    }
                    else if (openFileDialog.FileName.Contains("(Pie)"))
                    {
                        string jsonString = File.ReadAllText(openFileDialog.FileName);
                        //PieTask pie = JsonSerializer.Deserialize<PieTask>(jsonString);
                        PieTask pie = JsonConvert.DeserializeObject <PieTask>(jsonString, new JsonSerializerSettings()
                        {
                            TypeNameHandling = TypeNameHandling.Auto
                        });
                        PieControl pieControl = new PieControl(pie);
                        SuspendLayout();
                        plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                        pieControl.Location   = TaskControlLocation;
                        pieControl.Name       = "taskControl";
                        pieControl.DataValid += PieControl_DataValid;
                        plUserControl.Controls.Add(pieControl);
                        ResumeLayout();
                    }
                    else if (openFileDialog.FileName.Contains("(Elbow)"))
                    {
                        string jsonString = File.ReadAllText(openFileDialog.FileName);
                        //ElbowTask elbow = JsonSerializer.Deserialize<ElbowTask>(jsonString);
                        ElbowTask elbow = JsonConvert.DeserializeObject <ElbowTask>(jsonString, new JsonSerializerSettings()
                        {
                            TypeNameHandling = TypeNameHandling.Auto
                        });
                        ElbowControl elbowControl = new ElbowControl(elbow);
                        SuspendLayout();
                        plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                        elbowControl.Location   = TaskControlLocation;
                        elbowControl.Name       = "taskControl";
                        elbowControl.DataValid += ElbowControl_DataValid;
                        plUserControl.Controls.Add(elbowControl);
                        ResumeLayout();
                    }
                    else if (openFileDialog.FileName.Contains("(Land Run)"))
                    {
                        string jsonString = File.ReadAllText(openFileDialog.FileName);
                        //LandRunTask landRun = JsonSerializer.Deserialize<LandRunTask>(jsonString);
                        LandRunTask landRun = JsonConvert.DeserializeObject <LandRunTask>(jsonString, new JsonSerializerSettings()
                        {
                            TypeNameHandling = TypeNameHandling.Auto
                        });
                        LandRunControl landrunControl = new LandRunControl(landRun);
                        SuspendLayout();
                        plUserControl.Controls.Remove(plUserControl.Controls["taskControl"]);
                        landrunControl.Location   = TaskControlLocation;
                        landrunControl.Name       = "taskControl";
                        landrunControl.DataValid += LandrunControl_DataValid;
                        plUserControl.Controls.Add(landrunControl);
                        ResumeLayout();
                    }
                    else
                    {
                        Log(LogSeverityType.Error, "Failed import task: Unkown task type");
                        return;
                    }
                }
                catch (Exception ex)
                {
                    Log(LogSeverityType.Error, $"Failed to import task: {ex.Message}");
                    return;
                }
            }
        }