using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Tanshu.Accounts.Repository;
using Tanshu.Accounts.Contracts;

namespace Tanshu.Accounts.PointOfSale
{
    public partial class frmSaleAnalysisForm : Form
    {
        IList<SalesAnalysis> _list;
        bool _loading;
        public frmSaleAnalysisForm()
        {
            _loading = true;
            InitializeComponent();
        }

        private void SaleAnalysisForm_Load(object sender, EventArgs e)
        {
            dtpStart.Format = DateTimePickerFormat.Custom;
            dtpStart.CustomFormat = "dd-MMM-yyyy";
            dtpStart.Value = DateTime.Now.Date;
            dtpFinish.Format = DateTimePickerFormat.Custom;
            dtpFinish.CustomFormat = "dd-MMM-yyyy";
            dtpFinish.Value = DateTime.Now.Date;
            _loading = false;
            ShowStatement();
        }

        private void dtpStart_ValueChanged(object sender, EventArgs e)
        {
            ShowStatement();
        }

        private void ShowStatement()
        {
            if (_loading)
                return;
            if (DateTime.Today.Subtract(dtpStart.Value.Date).Days > 5 &&
                !Session.IsAllowed("Accounts Audit"))
                return;
            var start = dtpStart.Value.Date.AddHours(6);
            var finish = dtpFinish.Value.Date.AddDays(1).AddHours(5);
            _list = new List<SalesAnalysis>();
            if (finish > start)
            {
                var list = new List<SalesAnalysis>();
                list.AddRange(SalesAnalysisBI.GetSale(start, finish));
                list.Add(new SalesAnalysis() { GroupType = "  --  ", Amount = 0 });
                list.AddRange(SalesAnalysisBI.GetSettlements(start, finish));
                list.Add(new SalesAnalysis() { GroupType = "  --  ", Amount = 0 });
                var sc = SalesAnalysisBI.GetServiceCharge(start, finish);
                if (sc != null)
                    list.Add(sc);

                foreach (var item in SalesAnalysisBI.GetServiceTax(start, finish))
                {
                    if (item.TaxAmount != 0)
                    {
                        list.Add(new SalesAnalysis() { GroupType = item.Name, Amount = item.TaxAmount });
                    }
                }
                foreach (var item in SalesAnalysisBI.GetVat(start, finish))
                {
                    if (item.TaxAmount != 0)
                    {
                        list.Add(new SalesAnalysis() { GroupType = item.Name, Amount = item.TaxAmount });
                    }
                }
                _list = list;
            }


            dgvSale.AutoGenerateColumns = true;
            dgvSale.DataSource = _list;
            dgvSale.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dgvSale.Columns[1].DefaultCellStyle.Format = "#,##0.00;(#,##0.00);0";
            dgvSale.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
        }

        private void dtpFinish_ValueChanged(object sender, EventArgs e)
        {
            ShowStatement();
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            if (_list != null)
            {
                var startDate = dtpStart.Value.Date.AddHours(6);
                var finishDate = dtpFinish.Value.Date.AddDays(1).AddHours(5);
                Accounts.Print.Thermal.PrintSale(Session.User.Name, _list, startDate, finishDate);
            }
        }
    }
}