<?php

session_start();
ob_start();

$do = isset($_GET['do']) ? $_GET['do'] : "";
$ajaxDoArr = array("add2SimpleReturn");

include("initiateStaticSessionCommingWithCurl.php");
if (isset($_POST['curlpost']) && $_POST['curlpost'] == 1) {
    array_push($ajaxDoArr, $do);
}

if (!in_array($do, $ajaxDoArr)) {
    include("../public/impOpreation.php");
}



include_once("../public/config.php");
include("../library/newUplode/uploadfunctions.php");


require_once('../models/dao/YoutubeLinkDAO.class.php');
require_once('../models/dto/YoutubeLink.class.php');
require_once('../models/mysql/YoutubeLinkMySqlDAO.class.php');
require_once('../models/mysql/ext/YoutubeLinkMySqlExtDAO.class.php');
include '../library/Classes/PHPExcel/IOFactory.php';




//get the do the action
$do = $_GET['do'];

$langs = $_SESSION['erp_lang'];
include_once("../views/languages/$langs/success.php");
include_once("../views/languages/$langs/error.php");


if (!in_array($do, $ajaxDoArr)) {
    if (isset($_POST['curlpost']) && $_POST['curlpost'] == 1) {

    } else {
        $smarty->display("header.html");
    }
}



$youtubeLink = new YoutubeLink();
$youtubeLinkDAO = new YoutubeLinkMySqlDAO();
$youtubeLinkEX = new YoutubeLinkMySqlExtDAO();

$today = date("Y-m-d");
//check and use the condition that suite this action
if (empty($do)) {
    //here the permission check
     $sql = "SELECT * FROM employeesdetails WHERE isdel=0";
    $showData = R::getAll($sql);
    $smarty->assign("showData", $showData);
    $smarty->display("loansview/add.html");
} elseif ($do == "add") {
    try { 
    
        add();
        if (isset($_POST['curlpost']) && $_POST['curlpost'] == 1) {
            $data = array('status' => 1, 'message' => 'تمت العمليه بنجاح', 'message_en' => 'Success');
            echo json_encode($data);
        } else {
            header("location:?do=sucess");
        }
    } catch (Exception $e) {
        echo $e;
        die();
        if (isset($_POST['curlpost']) && $_POST['curlpost'] == 1) {
            $data = array('status' => 2, 'message' => 'حدث خطأ', 'message_en' => 'Error');
            echo json_encode($data);
        } else {
            header("location:?do=error");
        }
    }
}elseif ($do == "show") {
   
    $month = isset($_REQUEST['month']) ? (int)$_REQUEST['month'] : 0;

   
    if ($month > 0) {
        $sql = "SELECT ba.*, u.employeename, e.name 
                FROM loans ba
                LEFT JOIN user u ON ba.userid = u.userid 
                LEFT JOIN employeesdetails e ON ba.name = e.id
                WHERE ba.isdel = 0 AND ba.month = ?
                ";
        $showData = R::getAll($sql, [$month]);
    } else {
        $showData = []; 
    }

    $smarty->assign('showData', $showData);
    $smarty->assign('currentMonth', $month);

    
    if (isset($_GET['ajax'])) {
        $smarty->display("loansview/table_rows.html"); 
        exit;
    }

  
    $youtubes = $youtubeLinkDAO->queryAll();
    $smarty->assign("youtubes", $youtubes);
    $smarty->assign("customCheck", 1);
    $smarty->display("loansview/show.html");
 }elseif ($do == "deleteFinaly") {
    try {
        $id = (int) $_GET['id'];
        deleteFinaly($id);

        if (isset($_POST['curlpost']) && $_POST['curlpost'] == 1) {
            $data = array('status' => 1, 'message' => 'تمت العمليه بنجاح', 'message_en' => 'Success');
            echo json_encode($data);
        } else {
            header("location:?do=sucess");
        }
    } catch (Exception $e) {
        if (isset($_POST['curlpost']) && $_POST['curlpost'] == 1) {
            $data = array('status' => 2, 'message' => 'حدث خطأ', 'message_en' => 'Error');
            echo json_encode($data);
        } else {
            header("location:?do=error");
        }
    }
}elseif ($do == "ajax_update") {
    ob_clean(); 
    try {
        $id     = isset($_POST['id']) ? (int)$_POST['id'] : 0;
        $column = isset($_POST['column']) ? trim($_POST['column']) : '';
        $value  = isset($_POST['value']) ? trim($_POST['value']) : '';
        $allowed = [
            'value',
            'add1','add2','exe1','exe2','salary','serv_box','exe3','exe4','notes','total_deductions','total_earns',
            'other_discounts',
            'other_additions'
        ];

        if ($id <= 0) {
            echo "error_invalid_id"; exit;
        }

        if (!in_array($column, $allowed)) {
            echo "error_invalid_column"; exit;
        }

        $pay = R::load('loans', $id);
        if (!$pay->id) {
            echo "error_id_not_found"; 
            exit;
        }

       
        if (in_array($column, ['loans', 'deductions'])) {
            $pay->$column = (float)$value;
        } else {
            $pay->$column = (int)$value;
        }

        R::store($pay);

        echo "success";

    } catch (Exception $e) {
        echo "error_" . $e->getMessage();
    }
    exit; 

}elseif ($do == "update") { 
    try {
        update();
        if (isset($_POST['curlpost']) && $_POST['curlpost'] == 1) {
            $data = array('status' => 1, 'message' => 'تمت العمليه بنجاح', 'message_en' => 'Success');
            echo json_encode($data);
        } else {
            header("location:?do=sucess");
        }
    } catch (Exception $e) {
        if (isset($_POST['curlpost']) && $_POST['curlpost'] == 1) {
            $data = array('status' => 2, 'message' => 'حدث خطأ', 'message_en' => 'Error');
            echo json_encode($data);
        } else {
            header("location:?do=error");
        }
    }

  

} elseif ($do == "importExcel") { 
    try {
      addRewardsByMonthExcel();
        header("location:?do=show&status=success");
    } catch (Exception $e) {
        header("location:?do=error");
    }
} elseif ($do == "sucess") {
    //here the smarty templates
    $smarty->display("succes.html");
} elseif ($do == "error") {
    //here the smarty templates
    $smarty->display("error.html");
}


$smarty->assign("customValidation", 1);

//here the global templates
if (!in_array($do, $ajaxDoArr)) {
    if (isset($_POST['curlpost']) && $_POST['curlpost'] == 1) {

    } else {
        $smarty->display("footer.html");
    }
}

/* ===============================
  function in this CONTROLLER
  ================================ */

// add in tenderannouncement tbl
function add() {
   
    $name = $_POST['name'];
    $month = $_POST['month'];
    $value = $_POST['value'];
    $salary = $_POST['salary'];
    $add1   =$_POST['add1'];
    $add2   =$_POST['add2'];
    $serv_box   =$_POST['serv_box'];
    $exe1 = $_POST['exe1'];
    $exe2 = $_POST['exe2'];
    $exe3 = $_POST['exe3'];
    $exe4 = $_POST['exe4'];
    $notes = $_POST['notes'];
    $total_deductions = $_POST['total_deductions'];
    $total_earns = $_POST['total_earns'];
    $other_additions = $_POST['other_additions'];
    $other_discounts = $_POST['other_discounts'];
    $rdispense = R::dispense('loans');
    $rdispense->name= $name;
    $rdispense->month = $month;
    $rdispense->value = $value;
    $rdispense->salary = $salary;
    $rdispense->add1 = $add1;
    $rdispense->add2 = $add2;
    $rdispense->serv_box = $serv_box;
    $rdispense->exe1 = $exe1;
    $rdispense->exe2 = $exe2;
    $rdispense->exe3 = $exe3;
    $rdispense->exe4 = $exe4;
    $rdispense->notes = $notes;
    $rdispense->total_deductions = $total_deductions;
    $rdispense->total_earns = $total_earns;
    $rdispense->other_additions = $other_additions;
    $rdispense->other_discounts = $other_discounts;
    $rdispense->sys_date = date("Y-m-d H:i:s");
    $rdispense->userid = $_SESSION['userid'];
    $rdispense->isdel = 0;
    
    $id = R::store($rdispense);
    return $id;
}

function update() {

    $id = $_POST['id'];
    $name = $_POST['name'];
    $month = $_POST['month'];
    $value = $_POST['value'];
    $salary = $_POST['salary'];
    $serv_box = $_POST['serv_box'];
    $add1   =$_POST['add1'];
    $add2   =$_POST['add2'];
    $exe1 = $_POST['exe1'];
    $exe2 = $_POST['exe2'];
    $exe3 = $_POST['exe3'];
    $exe4 = $_POST['exe4'];
    $notes = $_POST['notes'];
    $total_deductions = $_POST['total_deductions'];
    $total_earns = $_POST['total_earns'];
    $other_additions = $_POST['other_additions'];
    $other_discounts = $_POST['other_discounts'];
    $rupdate = R::load('loans', $id);
    $rupdate->name= $name;
    $rupdate->month = $month;
    $rupdate->value = $value;
    $rupdate->salary = $salary;
    $rupdate->add1 = $add1;
    $rupdate->add2 = $add2;
    $rupdate->serv_box = $serv_box;
    $rupdate->exe1 = $exe1;
    $rupdate->exe2 = $exe2;
    $rupdate->exe3 = $exe3;
    $rupdate->exe4 = $exe4;
    $rupdate->notes = $notes;
    $rupdate->total_deductions = $total_deductions;
    $rupdate->total_earns = $total_earns;
    $rupdate->other_additions = $other_additions;
    $rupdate->other_discounts = $other_discounts;
    $rupdate->sys_date = date("Y-m-d H:i:s");
    $rupdate->userid = $_SESSION['userid'];
    $rupdate->isdel = 0;
    
   
    $id = R::store($rupdate);
}

function deleteFinaly($id) { 
    
    $rupdates = R::load('loans', $id);
    
    if ($rupdates->id > 0) {
        $rupdates->isdel = 1;
        R::store($rupdates);
    }
}


function addRewardsByMonthExcel() {
    global $today;
    $userId = $_SESSION['userid'];
    
    if (!isset($_FILES['loanssheet'])) return false;
    $selectedMonth = isset($_POST['month']) ? (int)$_POST['month'] : 0;
      if (!is_dir("../upload/loanssheet")) {
        mkdir("../upload/loanssheet", 0777, true);
    }
    $excelfileName = uploadnew('loanssheet', false, 0, 0, 'loanssheet', 7);
    $inputFileName = "../upload/loanssheet/" . $excelfileName;
  
    try {
        $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
        $sheet = $objPHPExcel->getSheet(0);
        $highestRow = $sheet->getHighestRow();
        $count = 0;

        
        for ($row = 7; $row <= $highestRow; $row++) {
            $cellValue = $sheet->getCell('B' . $row)->getValue();
            $rawName = ($cellValue instanceof PHPExcel_RichText) ? $cellValue->getPlainText() : $cellValue;
            $rawName = trim($rawName);

            if (empty($rawName) || in_array($rawName, ["الاسم", "الاجمالي", "إجمالي", "Total"])) {
                if ($row > 10) break; 
                continue;
            }
            $cleanName = str_replace(['أ','إ','آ','ة','ى'], ['ا','ا','ا','ه','ي'], $rawName);
            $cleanName = preg_replace('/\s+/', ' ', $cleanName); 
            $employee = R::findOne('employeesdetails', 
                "REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(name, 'أ', 'ا'), 'إ', 'ا'), 'آ', 'ا'), 'ة', 'ه'), 'ى', 'ي') LIKE ?", 
                ["%$cleanName%"]
            );

            if ($employee) {
                
                $pay = R::findOne('loans', 'name = ? AND month = ? AND isdel = 0', [$employee->id, $selectedMonth]);
                
                if (!$pay) {
                    $pay = R::dispense('loans');
                }

                $pay->name   = (int)$employee->id;
                $pay->month  = (int)$selectedMonth;
                $pay->salary       = $sheet->getCell('D' . $row)->getCalculatedValue(); 
                $pay->add1       = $sheet->getCell('F' . $row)->getCalculatedValue(); 
                $pay->add2       = $sheet->getCell('H' . $row)->getCalculatedValue(); 
                $pay->value       = $sheet->getCell('J' . $row)->getCalculatedValue(); 
                $pay->serv_box       = $sheet->getCell('L' . $row)->getCalculatedValue(); 
                $pay->exe1   = $sheet->getCell('N' . $row)->getCalculatedValue(); 
                $pay->exe2  = $sheet->getCell('P' . $row)->getCalculatedValue(); 
                $pay->exe3  = $sheet->getCell('R' . $row)->getCalculatedValue();
                $pay->exe4  = $sheet->getCell('T' . $row)->getCalculatedValue();
                $pay->total_deductions  = $sheet->getCell('V' . $row)->getCalculatedValue(); 
                $pay->total_earns  = $sheet->getCell('X' . $row)->getCalculatedValue(); 
                $pay->notes  = $sheet->getCell('Z' . $row)->getCalculatedValue(); 
                $pay->other_additions     = 0;
                $pay->other_discounts   = 0; 
                $pay->sys_date = date("Y-m-d H:i:s");
                $pay->userid   = $userId;
                $pay->isdel    = 0;
                
                R::store($pay);
                $count++;
            }
        }
        return $count; 

    } catch (Exception $e) { 
        die('خطأ في معالجة الملف: ' . $e->getMessage()); 
    }
}