using LDBproject.Repositories;
using Unity;

namespace LDBproject.AdditionalForms;

public partial class OrdersF : Form
{
    private readonly IUnityContainer _container;
    private readonly IOrderRep _regR;

    public OrdersF(IUnityContainer container, IOrderRep regR)
    {
        InitializeComponent();
        _regR = regR ?? throw new ArgumentNullException(nameof(regR));
        _container = container ?? throw new ArgumentNullException(nameof(container));
    }

    private void RegistrationsF_Load(object sender, EventArgs e)
    {
        try
        {
            ReloadList();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "[ Error while saving ]", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    private void AddBtn_Click(object sender, EventArgs e)
    {
        try
        {
            _container.Resolve<RegOrderF>().ShowDialog();
            ReloadList();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "[ Error while adding element ]", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    private void DelBtn_Click(object sender, EventArgs e)
    {
        if (!GetIDFromRow(out var foundID))
        {
            return;
        }

        if (MessageBox.Show("Remove element?", "Deleting", MessageBoxButtons.YesNo) != DialogResult.Yes)
        {
            return;
        }

        try
        {
            _regR.DeleteOrderinfo(foundID);
            ReloadList();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "[ Error while removing element ]", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    private void ReloadList()
    {
        var res = _regR.GetOrdersInfo();
        DataGV.DataSource = _regR.GetOrdersInfo();
        // DataGV.Columns["ID"].Visible = false;
        // DataGV.Columns["OrderID"].Visible = false;
        DataGV.Columns["BorrowDate"].DefaultCellStyle.Format = "dd MMMM yyyy";
    }

    private bool GetIDFromRow(out int id)
    {
        id = 0;
        if (DataGV.SelectedRows.Count < 1)
        {
            MessageBox.Show("[ Error : element doesn't exist ]", "<ERROR>",
                MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        id = Convert.ToInt32(DataGV.SelectedRows[0].Cells["OrderID"].Value);
        return true;
    }
}