<?php

namespace App\Http\Controllers\Owner;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Helpers\ResponseBuilder;
use App\Http\Helpers\ParamsValidator;
use App\Http\History\HistoryData;
use App\Http\History\HistoryTables;
use Illuminate\Support\Facades\DB;

class TourLock extends Controller
{
    private $oDomain;
    /** @var HistoryData */
    private $history;

    public function __construct()
    {
        $this->oDomain = "Tour Lock";
        $this->history = new HistoryData(HistoryTables::tour_lock);
    }

    public function Insert(Request $Request)
    {
        $oResponse  = array();
        $oValParams = array(
            'TourLock_DateStart'    => 'required|string',
            'TourLock_DateEnd'        => 'required|string',
            'TourLock_Remark'        => 'string',
            'Id_Tour'                => 'required|int'
        );


        // VALIDANDO DATOS
        $oResponse = ParamsValidator::Validate_Request($Request, $oValParams, $this->oDomain);

        //  INGRESANDO DATOS
        if ($oResponse["Response_Code"] == 200) {
            $oParam = array(
                $Request->input("TourLock_DateStart"),
                $Request->input("TourLock_DateEnd"),
                $Request->input("TourLock_Remark"),
                $Request->input("Id_Tour")
            );
            $oData = DB::select('call sp_tour_lock_insert(?,?,?,?)', $oParam);

            //  RESPONSE
            if ($oData[0]->Response_Success == 1) {
                //region HISTORY EXEC
                $this->history->insertBasic($Request);
                //endregion
            } else {
            }

            $oResponse["Response_Status"]            = $oData[0]->Response_Status;
            $oResponse["Response_Code"]                = $oData[0]->Response_Code;
            $oResponse["Response_Domain"]            = $this->oDomain;
            $oResponse["Response_Message"]            = $oData[0]->Response_Message;
            $oResponse["Response_Data"]                = null;
            $oResponse["Response_Error_Message"]    = $oData[0]->Response_Message;
            $oResponse["Response_Error_Reason"]        = $oData[0]->Response_Reason;
        }

        return ResponseBuilder::Response($oResponse);
    }
    public function Update(Request $Request)
    {
        $oResponse  = array();
        $oValParams = array(
            'Id_TourLock'            => 'required|int',
            'TourLock_DateStart'    => 'required|string',
            'TourLock_DateEnd'        => 'required|string',
            'TourLock_Remark'        => 'string',
            'Id_Tour'                => 'required|int'
        );


        // VALIDANDO DATOS
        $oResponse = ParamsValidator::Validate_Request($Request, $oValParams, $this->oDomain);

        //  INGRESANDO DATOS
        if ($oResponse["Response_Code"] == 200) {

            //region HISTORY VARIABLES
            $this->history->obtainOld($Request->input('Id_TourLock'));
            //endregion

            $oParam = array(
                $Request->input("Id_TourLock"),
                $Request->input("TourLock_DateStart"),
                $Request->input("TourLock_DateEnd"),
                $Request->input("TourLock_Remark"),
                $Request->input("Id_Tour")
            );
            $oData = DB::select('call sp_tour_lock_update(?,?,?,?,?)', $oParam);

            //  RESPONSE
            if ($oData[0]->Response_Success == 1) {
                //region HISTORY EXEC
                $this->history->updateBasic($Request->input("Id_TourLock"), $Request);
                //endregion
            } else {
            }

            $oResponse["Response_Status"]            = $oData[0]->Response_Status;
            $oResponse["Response_Code"]                = $oData[0]->Response_Code;
            $oResponse["Response_Domain"]            = $this->oDomain;
            $oResponse["Response_Message"]            = $oData[0]->Response_Message;
            $oResponse["Response_Data"]                = null;
            $oResponse["Response_Error_Message"]    = $oData[0]->Response_Message;
            $oResponse["Response_Error_Reason"]        = $oData[0]->Response_Reason;
        }

        return ResponseBuilder::Response($oResponse);
    }
    public function Delete(Request $Request, $Id)
    {
        $oResponse  = array();

        // VALIDANDO DATOS
        $oResponse = ParamsValidator::Validate_Id($Id, $this->oDomain);

        //  INGRESANDO DATOS
        if ($oResponse["Response_Code"] == 200) {

            //region HISTORY
            $this->history->obtainOld($Id);
            //endregion

            $oParam = array($Id);
            $oData     = DB::select('call sp_tour_lock_delete(?)', $oParam);

            //  RESPONSE
            if ($oData[0]->Response_Success == 1) {
                //region HISTORY EXEC
                $this->history->deleteBasic($Id, $Request);
                //endregion
            } else {
            }

            $oResponse["Response_Status"]            = $oData[0]->Response_Status;
            $oResponse["Response_Code"]                = $oData[0]->Response_Code;
            $oResponse["Response_Domain"]            = $this->oDomain;
            $oResponse["Response_Message"]            = $oData[0]->Response_Message;
            $oResponse["Response_Data"]                = null;
            $oResponse["Response_Error_Message"]    = $oData[0]->Response_Message;
            $oResponse["Response_Error_Reason"]        = $oData[0]->Response_Reason;
        }

        return ResponseBuilder::Response($oResponse);
    }
    public function Index(Request $Request, $Id)
    {
        $oResponse  = array();

        // VALIDANDO DATOS
        $oResponse = ParamsValidator::Validate_Id($Id, $this->oDomain);

        //  INGRESANDO DATOS
        if ($oResponse["Response_Code"] == 200) {
            $oParam = array($Id);
            $oData     = DB::select('call sp_tour_lock_index(?)', $oParam);

            $oResponse["Response_Status"]            = 200;
            $oResponse["Response_Code"]                = 200;
            $oResponse["Response_Domain"]            = $this->oDomain;
            $oResponse["Response_Message"]            = $this->oDomain . " Index";
            $oResponse["Response_Data"]                = $oData;
            $oResponse["Response_Error_Message"]    = "";
            $oResponse["Response_Error_Reason"]        = "";
        }

        return ResponseBuilder::Response($oResponse);
    }
    public function List(Request $Request, $Id_Tour)
    {
        $oResponse  = array();
        $oValParams = array(
            'Month'        => 'required|int',
            'Year'        => 'required|int'
        );

        // VALIDANDO DATOS
        $oResponse = ParamsValidator::Validate_Request($Request, $oValParams, $this->oDomain);

        //  INGRESANDO DATOS
        if ($oResponse["Response_Code"] == 200) {

            $oResponse = ParamsValidator::Validate_Id($Id_Tour, $this->oDomain);

            if ($oResponse["Response_Code"] == 200) {
                $oParam = array(
                    $Id_Tour,
                    $Request->input("Month"),
                    $Request->input("Year")
                );
                $oData  = DB::select('call sp_tour_lock_list(?,?,?,0)', $oParam);

                $oResponse["Response_Status"]            = 200;
                $oResponse["Response_Code"]                = 200;
                $oResponse["Response_Domain"]            = $this->oDomain;
                $oResponse["Response_Message"]            = $this->oDomain . " list";
                $oResponse["Response_Data"]                = $oData;
                $oResponse["Response_Error_Message"]    = "";
                $oResponse["Response_Error_Reason"]        = "";
            }
        }

        return ResponseBuilder::Response($oResponse);
    }
}
