private async void DeletePaper(PaperDataListItem paperListItem)
        {
            if (Messages.ShowQuestion("Are you sure you want to delete this Paper?", "Hold On", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.No)
            {
                return;
            }

            bool isDeleted = await GeneralManager.RemovePaper(paperListItem.PaperCode);

            try
            {
                if (isDeleted)
                {
                    containerFlowPanel.Controls.Remove(paperListItem);

                    if (GeneralManager.GetExamPapers.GetPapers.Count == 0)
                    {
                        if (!containerFlowPanel.Controls.Contains(emptyListLabel))
                        {
                            containerFlowPanel.Controls.Add(emptyListLabel);
                        }

                        emptyListLabel.Visible = true;
                    }

                    await LSTM.SavePapers(GeneralManager.GetExamPapers);
                }
            }
            catch (Exception ex)
            {
                Messages.ShowError(ex.Message);
            }
        }
        private void PopulateListItems()
        {
            containerFlowPanel.Controls.Clear();

            if (ExamPaper == null || ExamPaper.GetPapers.Count == 0)
            {
                containerFlowPanel.Controls.Add(emptyListLabel);
                emptyListLabel.Visible = true;
                return;
            }

            for (int i = 0; i < ExamPaper.GetPapers.Count; i++)
            {
                PaperDataListItem paperDataListItem = PaperDataListItem.Create(ExamPaper.GetPapers[i]);
                paperDataListItem.OnControlButtonPressedEvent += PaperDataListItem_OnControlButtonPressedEvent;
                containerFlowPanel.Controls.Add(paperDataListItem);
                paperDataListItem.Size = new Size(containerFlowPanel.Width, 48);
            }
        }
        private void ConfigurePaper(PaperDataListItem paperDataListItem)
        {
            paperToEdit = GeneralManager.GetExamPapers.GetPapers.Find(x => x.Code == paperDataListItem.PaperCode);
            paperCodeField.IntegerValue         = paperToEdit.Code;
            paperTitleField.Text                = paperToEdit.Title;
            paperDirectionField.SelectedValue   = paperToEdit.GetPaperDirection;
            paperFieldsCountField.IntegerValue  = paperToEdit.GetFieldsCount;
            paperOptionsCountField.IntegerValue = paperToEdit.GetOptionsCount;

            isEditingPaper = true;

            papersListTable.Visible         = false;
            paperConfigurationPanel.Visible = true;
            paperConfigurationPanel.Dock    = DockStyle.Fill;

            paperDirectionField.DataSource    = EnumHelper.ToList(typeof(PaperDirection));
            paperDirectionField.DisplayMember = "Value";
            paperDirectionField.ValueMember   = "Key";
        }
        private async void finishPaperBtn_Click(object sender, EventArgs e)
        {
            int paperCode = (int)paperCodeField.IntegerValue;

            if (paperCodeField.Text == "")
            {
                Messages.ShowError("Paper code cannot be empty");
                return;
            }
            else if (!isEditingPaper && GeneralManager.GetExamPapers != null && GeneralManager.GetExamPapers.GetPapers.Exists(x => x.Code == paperCode))
            {
                Messages.ShowError("Paper code already exists");
                return;
            }
            string paperTitle = paperTitleField.Text;

            if (paperTitleField.Text == "")
            {
                Messages.ShowError("Paper title cannot be empty");
                return;
            }
            else if (!isEditingPaper && GeneralManager.GetExamPapers != null && GeneralManager.GetExamPapers.GetPapers.Exists(x => x.Title == paperTitle))
            {
                Messages.ShowError("Paper with that title already exists");
                return;
            }
            PaperDirection paperDirection = (PaperDirection)paperDirectionField.SelectedValue;
            int            totalFields    = (int)paperFieldsCountField.IntegerValue;
            int            totalOptions   = (int)paperOptionsCountField.IntegerValue;

            if (paperFieldsCountField.Text == "")
            {
                Messages.ShowError("Paper fields cannot be empty");
                return;
            }
            if (paperOptionsCountField.Text == "")
            {
                Messages.ShowError("Paper options cannot be empty");
                return;
            }
            else if (totalOptions < 2)
            {
                Messages.ShowError("There must atleast be more than one option per field.");
                return;
            }

            Paper newPaper = new Paper(paperCode, paperTitle, totalFields, totalOptions, paperDirection);

            if (!isEditingPaper)
            {
                GeneralManager.GetExamPapers.GetPapers.Add(newPaper);

                PaperDataListItem paperDataListItem = PaperDataListItem.Create(newPaper);
                containerFlowPanel.Controls.Add(paperDataListItem);
                emptyListLabel.Visible = false;
            }
            else
            {
                var oldCode = paperToEdit.Code;
                paperToEdit.Reset(newPaper);
                isEditingPaper = false;

                for (int i = 0; i < containerFlowPanel.Controls.Count; i++)
                {
                    PaperDataListItem paperDataListItem = (PaperDataListItem)containerFlowPanel.Controls[i];
                    if (paperDataListItem.PaperCode == oldCode)
                    {
                        paperDataListItem.PaperCode  = paperCode;
                        paperDataListItem.PaperTitle = paperTitle;
                    }
                }
            }

            papersListTable.Visible         = true;
            paperConfigurationPanel.Visible = false;
            papersListTable.Dock            = DockStyle.Fill;
            await LSTM.SavePapers(GeneralManager.GetExamPapers);
        }