using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataPoolingService
{
    class DALmachine
    {
        private static int machine_id;
        private static double hrs;
        private static int count;
        private static double efficiency;
        private static DateTime date;

        ConnectionClass ConnectionClass = new ConnectionClass();
        Logger Logger = new Logger();
        SqlCommand sqlCommand = new SqlCommand();
        DataTable dataTable = new DataTable();
        SqlDataAdapter SqlDataAdapter = new SqlDataAdapter();

        MySqlCommand MySqlCommand = new MySqlCommand();
        Boolean check = false;
        public void executeProcess()
        {
            try
            {
                ConnectionClass.OpenConnection();
                //string query = "Select * from utility_sub_meter_reading WHERE CONVERT(date, date) = '2024-06-11'";
                string query = "Select * from machine_production a where CONVERT(date,a.reading_timestamp)= CONVERT(date,GETDATE())";

                sqlCommand = new SqlCommand(query, ConnectionClass.connection);
                SqlDataAdapter.SelectCommand = sqlCommand;
                SqlDataAdapter.Fill(dataTable);
                ConnectionClass.CloseConnection();

                if (dataTable.Rows.Count > 0)
                {
                    if (CheckRecordExist() == false)
                    {
                        InsertingData(dataTable);
                    }
                    else
                    {
                        //Logger.RecordExistLog();
                    }
                }
                else
                {
                    //Logger.NotFoundLog();
                }
            }
            catch (Exception ex)
            {
                ConnectionClass.CloseConnection();
            }

        }
        private bool CheckRecordExist()
        {
            try
            {
                ConnectionClass.OpenConnectionMysql();

                DataRowCollection rows = dataTable.Rows; // Get the collection of rows from the DataTable

                string query = "  SELECT * FROM machine_production WHERE DATE(reading_timestamp) = CURDATE() limit 1";
                //string query = "Select * from utility_sub_meter_reading a where date(a.reading_timestamp) = '2024-04-05'";

                MySqlCommand mySqlCommand = new MySqlCommand(query, ConnectionClass.MySqlConnection);

                using (MySqlDataReader dataReader = mySqlCommand.ExecuteReader())
                {
                    // Check if any rows are returned by the query
                    if (dataReader.HasRows)
                    {
                        check = true;
                        return true; // Records exist for the current date
                    }
                }
                check = false;
                return false; // No records found for the current date
            }
            catch (Exception ex)
            {
                // Log or handle the exception appropriately
                Console.WriteLine("Error: " + ex.Message);
                return false; // Or return true/false based on your error handling strategy
            }
            finally
            {
                ConnectionClass.CloseConnectionMysql(); // Ensure connection is closed
            }
        }

        private void InsertingData(DataTable dt)
        {
            try
            {
               //Logger.StartLogEvent();
                ConnectionClass.OpenConnectionMysql();
                foreach (DataRow dr in dt.Rows)
                {
                    machine_id = Convert.ToInt32(dr["machine_id"]);
                    hrs = Convert.ToDouble(dr["hrs"]);
                    count = Convert.ToInt32(dr["count"]);
                    efficiency = Convert.ToDouble(dr["efficiency"]);
                    date = Convert.ToDateTime(dr["reading_timestamp"]);

                    string mySqlDefaultFormat = date.ToString("yyyy-MM-dd HH:mm:ss");

                    string query = "INSERT INTO machine_production (machine_id, hrs, count, efficiency, reading_timestamp) " +
                                   "VALUES (@machine_id, @hrs, @count, @efficiency, @date)";

                    using (MySqlCommand cmd = new MySqlCommand(query, ConnectionClass.MySqlConnection))
                    {
                        cmd.Parameters.AddWithValue("@machine_id", machine_id);
                        cmd.Parameters.AddWithValue("@hrs", hrs);
                        cmd.Parameters.AddWithValue("@count", count);
                        cmd.Parameters.AddWithValue("@efficiency", efficiency);              
                        cmd.Parameters.AddWithValue("@date", mySqlDefaultFormat);

                        // Execute the query
                        int rowsAffected = cmd.ExecuteNonQuery();
                        //int rowsAffected = 1;

                        if (rowsAffected == 1)
                        {
                            // Log the successful insert to the text file
                            //Logger.RowSuccessLogMolding(machine_id, hrs, efficiency);
                        }
                        else
                        {
                            // Log the successful insert to the text file
                            //Logger.RowFailedLogMolding(machine_id, hrs, efficiency);
                        }
                    }
                }

                ConnectionClass.CloseConnectionMysql();
               // Logger.EndLogEvent();
            }
            catch (Exception ex)
            {
                // Handle any exceptions that may occur during execution.
                // You can log the exception or perform any necessary error handling here.
                ConnectionClass.CloseConnectionMysql();
            }
        }

    }
}
