using HRM.BO;
using HRM.DA;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.IO;

namespace HRM.AttendanceAutoProcess
{
    class Program
    {
        static void Main(string[] args)
        {
            AttendanceAutoProcessConfiguration oAttendanceAutoProcessConfiguration = new AttendanceAutoProcessConfiguration();
            StreamWriter ofile = null;
            string basepath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            string loc = basepath + "\\log.txt";

            if(!File.Exists(loc))
            {
                File.Create(loc).Dispose();
            }

            var configurationBuilder = new ConfigurationBuilder().SetBasePath(basepath).AddJsonFile("appsettings.json").Build();
            configurationBuilder.GetSection("AttendanceAutoProcess").Bind(oAttendanceAutoProcessConfiguration);

            DateTime processDate = DateTime.Today.AddDays(-oAttendanceAutoProcessConfiguration.NumberOfDaysToProcess).Date;
            try
            {
                new AttendanceProcess().Process(processDate, EnumProcessMode.Auto, oAttendanceAutoProcessConfiguration.PayrollTypeForAutoAttendanceProcess, 1);

                ofile = new StreamWriter(loc, true);
                ofile.WriteLine("Date & Time : {0}, Attendence Process Completed Successfully For {1}.", DateTime.Now.ToString(), processDate.ToString("dd MMM yyyy"));
                ofile.Close();
            }
            catch (Exception ex)
            {
                ofile = new StreamWriter(loc, true);
                ofile.WriteLine("Date & Time : {0}, Error While Processing Attendence Data For {1}, Reason: {2}.", DateTime.Now.ToString(), processDate.ToString("dd MMM yyyy"), ex.Message);
                ofile.Close();
            }
        }
    }
}