<?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("Rewardsview/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 r.*, u.employeename, e.name 
                FROM rewards r
                LEFT JOIN user u ON r.userid = u.userid 
                LEFT JOIN employeesdetails e ON r.name = e.id 
                WHERE r.isdel = 0 AND r.month = ?
                ";
        $showData = R::getAll($sql, [$month]);
    } else {
        $showData = []; 
    }

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

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

  
    $youtubes = $youtubeLinkDAO->queryAll();
    $smarty->assign("youtubes", $youtubes);
    $smarty->assign("customCheck", 1);
    $smarty->display("Rewardsview/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 = [
            'salary','move_val','efforts_val',
            'nature_val','total_earn',
            'advance','skh',
            'earn','stamp',
            'penalties','tax',
            'deductions',
            'net'
        ];

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

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

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

       
        if (in_array($column, ['rewards', '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'];
    $salary = $_POST['salary'];
    $move_val   =$_POST['move_val'];
   
    $efforts_val = $_POST['efforts_val'];
    $nature_val = $_POST['nature_val'];
    $total_earn = $_POST['total_earn'];
    $advance = $_POST['advance'];
    $skh = $_POST['skh'];
    $earn = $_POST['earn'];
    $stamp = $_POST['stamp'];
    $penalties = $_POST['penalties'];
    $tax = $_POST['tax'];
    $deductions = $_POST['deductions'];
    $net = $_POST['net'];
   
 
    $comment= $_POST['comment']; 
    
    $rdispense = R::dispense('rewards');
    $rdispense->name= $name;
    $rdispense->month = $month;
    $rdispense->salary = $salary;
    $rdispense->move_val = $move_val;
    $rdispense->efforts_val = $efforts_val;
    $rdispense->nature_val = $nature_val;
    $rdispense->total_earn = $total_earn;
    $rdispense->advance = $advance;
    $rdispense->skh = $skh;
    $rdispense->earn = $earn;
    $rdispense->stamp = $stamp;
    $rdispense->penalties = $penalties;
    $rdispense->tax = $tax;
    $rdispense->deductions = $deductions;
    $rdispense->net = $net;

   
  
    $rdispense->comment = $comment;
   
    $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'];
    $salary = $_POST['salary'];
    $move_val   =$_POST['move_val'];
   
    $efforts_val = $_POST['efforts_val'];
    $nature_val = $_POST['nature_val'];
    $total_earn = $_POST['total_earn'];
    $advance = $_POST['advance'];
    $skh = $_POST['skh'];
    $earn = $_POST['earn'];
    $stamp = $_POST['stamp'];
    $penalties = $_POST['penalties'];
    $tax = $_POST['tax'];
    $deductions = $_POST['deductions'];
    $net = $_POST['net'];
   
 
    $comment= $_POST['comment']; 
    $rupdate = R::load('rewards', $id);
    $rupdate->name= $name;
    $rupdate->month = $month;
    $rupdate->salary = $salary;
    $rupdate->move_val = $move_val;
    $rupdate->efforts_val = $efforts_val;
    $rupdate->nature_val = $nature_val;
    $rupdate->total_earn = $total_earn;
    $rupdate->advance = $advance;
    $rupdate->skh = $skh;
    $rupdate->earn = $earn;
    $rupdate->stamp = $stamp;
    $rupdate->penalties = $penalties;
    $rupdate->tax = $tax;
    $rupdate->deductions = $deductions;
    $rupdate->net = $net;
    $rupdate->comment = $comment;
    $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('rewards', $id);
    
    if ($rupdates->id > 0) {
        $rupdates->isdel = 1;
        R::store($rupdates);
    }
}


function addRewardsByMonthExcel() {
    global $today;
    $userId = $_SESSION['userid'];
    
    if (!isset($_FILES['rewardssheet'])) return false;
    $selectedMonth = isset($_POST['month']) ? (int)$_POST['month'] : 0;
    $excelfileName = uploadnew('rewardssheet', false, 0, 0, 'rewards', 7);
    $inputFileName = "../upload/rewards/" . $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('rewards', 'name = ? AND month = ? AND isdel = 0', [$employee->id, $selectedMonth]);
                
                if (!$pay) {
                    $pay = R::dispense('rewards');
                }

                $pay->name   = (int)$employee->id;
                $pay->month  = (int)$selectedMonth;
                $pay->salary       = $sheet->getCell('C' . $row)->getCalculatedValue(); 
                $pay->move_val   = $sheet->getCell('D' . $row)->getCalculatedValue(); 
                $pay->efforts_val  = $sheet->getCell('E' . $row)->getCalculatedValue(); 
                $pay->nature_val     = $sheet->getCell('F' . $row)->getCalculatedValue(); 
                $pay->total_earn   = $sheet->getCell('G' . $row)->getCalculatedValue(); 
                $pay->advance      = $sheet->getCell('H' . $row)->getCalculatedValue(); 
                $pay->skh      = $sheet->getCell('I' . $row)->getCalculatedValue(); 
                $pay->earn         = $sheet->getCell('J' . $row)->getCalculatedValue(); 
                $pay->stamp        =$sheet->getCell('K' . $row)->getCalculatedValue();
                $pay->penalties    = $sheet->getCell('L' . $row)->getCalculatedValue(); 
                $pay->tax    = $sheet->getCell('M' . $row)->getCalculatedValue(); 
                $pay->deductions   = $sheet->getCell('N' . $row)->getCalculatedValue(); 
                $pay->net          = (float)$sheet->getCell('O' . $row)->getCalculatedValue(); 
                $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()); 
    }
}