<?php
namespace App\Model;
use App\Model\BaseModel;
use App\Core\Service\Logger;

class AdminTemplateModel extends BaseModel
{
    public function __construct() {
        parent::__construct();
    }

    public function getTemplateMaster($search, $page_no, $page_limit, $sort_by="template_name", $sort_type="ASC") {
        try {
            $where = $this->whereString($search, array('*'=>'t1.'), array('template_name'=>'LIKE'), array());
            $sort_str = "";
            if(!empty($sort_by) && !empty($sort_type)) {
                $sort_str = " ORDER BY $sort_by $sort_type";
            }
            return $this->fetchPaginatedData("SELECT t1.*, IF(t1.status=1, 'Active', 'Inactive') AS status_title,
            (CASE t1.status WHEN 0 THEN 'alert-danger' WHEN 1 THEN '' END) AS status_alert_class,
            IF(t1.cr_date IS NOT NULL, DATE_FORMAT(t1.cr_date, '%d-%m-%Y %H:%i:%s'), '') AS created_date,
            IF(t1.md_date IS NOT NULL, DATE_FORMAT(t1.md_date, '%d-%m-%Y %H:%i:%s'), '') AS modified_date FROM ".$this->tables['admin_template']." t1 WHERE $where $sort_str", $page_no, $page_limit);
        } catch (\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line' => $e->getLine()]);
            return ["status" => false, "error" => $e->getMessage()];
        }
    }
    
    public function getTemplateAssignedList($where, $page_no, $page_limit, $sort_by="template_name", $sort_type="ASC") {
        try {
            $sort_str = "";
            if(!empty($sort_by) && !empty($sort_type)) {
                $sort_str = " ORDER BY $sort_by $sort_type";
            }
            return $this->fetchPaginatedData("SELECT t.id, t.template_id, t.template_for, t.status,
            (CASE t.status WHEN 0 THEN 'alert-danger' WHEN 1 THEN 'alert-light' END) AS status_alert_class,temp.template_name FROM ".$this->tables['admin_template_assign']." t LEFT JOIN ".$this->tables['admin_template']." as temp ON(t.template_id=temp.id) WHERE $where $sort_str", $page_no, $page_limit);
        } catch (\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line' => $e->getLine()]);
            return ["status" => false, "error" => $e->getMessage()];
        }
    }

    public function getTemplateList($filter=NULL) {
        try {
            return $this->fetchAllData("SELECT t1.* FROM ".$this->tables['admin_template']." t1 WHERE t1.status=1 ORDER BY template_name");
        } catch (\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line' => $e->getLine()]);
            return ["status" => false, "error" => $e->getMessage()];
        }
    }

    public function addTemplateFor($data) {
        try {
            return $this->batchInsert($this->tables['admin_template_assign'], $data);
        } catch (\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line' => $e->getLine()]);
            return ["status" => false, "error" => $e->getMessage()];
        }
    }

    public function getTemplateDetail(String $where) {
        try {
            return $this->fetchAllData("SELECT t1.*,t2.template_for FROM ".$this->tables['admin_template']." t1 LEFT JOIN ".$this->tables['admin_template_assign']." t2 ON(t2.template_id=t1.id) WHERE $where ORDER BY t1.template_name");
        } catch (\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line' => $e->getLine()]);
            return ["status" => false, "error" => $e->getMessage()];
        }
    }
}