<?php namespace App\Controllers\Presupuestos;


use App\Controllers\BaseResourceController;

use App\Models\Collection;

use App\Entities\Clientes\ClienteContactoEntity;

use App\Models\Clientes\ClienteModel;

use App\Models\Presupuestos\PresupuestoManipuladosModel;

class Presupuestomanipulados extends \App\Controllers\BaseResourceController
{
 
    protected $modelName = PresupuestoManipuladosModel::class;
    protected $format = 'json';

    protected static $singularObjectName = 'Presupuesto manipulado';
    protected static $singularObjectNameCc = 'presupuestoManipulado';
    protected static $pluralObjectName = 'Presupuestos manipulado';
    protected static $pluralObjectNameCc = 'presupuestosManipulado';

    protected static $controllerSlug = 'presupuesto-manipulado';

    protected static $viewPath = 'themes/vuexy/form/presupuestos/';


    public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
    {
        parent::initController($request, $response, $logger);
    }


    public function edit($requestedId = null)
    {

        if ($requestedId == null) :
            return;
        endif;

        $postData = $this->request->getJSON();
        $tarifas = array_column($postData->datos, 'tarifa_id');

        if(count($tarifas)>0){
            $this->model->deleteServiciosNotInArray($requestedId, $tarifas);
        }
        else{
            $this->model->deleteAllServicios($requestedId);
        }

        if(count($tarifas)>0){
            $this->model->updateTarifas($requestedId, $postData->datos);
        }

        $newTokenHash = csrf_hash();
        $csrfTokenName = csrf_token();
        $data = [
            $csrfTokenName => $newTokenHash
        ];
        
        return $this->respond($data);
    }

    public function getServicioSolapas(){

        if($this->request->isAJAX()){

            $servicio = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('servicio_solapas')->value;
            
            $newTokenHash = csrf_hash();
            $csrfTokenName = csrf_token();

            $data = [
                'service' => $servicio,
                $csrfTokenName => $newTokenHash
            ];

            return $this->respond($data);
        }
        else{
            return $this->failUnauthorized('Invalid request', 403);
        }
    }

    public function update($requestedId = null)
    {

        if ($requestedId == null) :
            return;
        endif;

        $postData = $this->request->getPost();
        $tarifas = $postData['datos'] ?? [];
        $tirada = $postData['tirada'] ?? 0;
        $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
        
        $result = $this->getServiciosManipulado($tarifas, $tirada, $POD);
        
        $newTokenHash = csrf_hash();
        $csrfTokenName = csrf_token();
        $data = [
            'lineas' => $result,
            $csrfTokenName => $newTokenHash
        ];
        
        return $this->respond($data);
    }

    public function getServiciosManipulado($datos_tarifas, $tirada, $POD)
    {
        $result = [];
        $model = model('App\Models\Presupuestos\PresupuestoManipuladosModel');
        
        if (count($datos_tarifas) > 0) {
            foreach ($datos_tarifas as $tarifa) {
                $tarifa_id = 0;
                if(is_array($tarifa)){
                    //check if $tarifa['tarifa_manipulado_id'] exists
                    if(array_key_exists('tarifa_manipulado_id', $tarifa)){
                        $tarifa_id = $tarifa['tarifa_manipulado_id'];
                    }
                    else if(array_key_exists('tarifa_id', $tarifa)){
                        $tarifa_id = $tarifa['tarifa_id'];
                    }
                }
                else{
                    $tarifa_id = $tarifa;
                }
                $values = $model->getPrecioTarifa($tarifa_id, $tirada, $POD);
                $values[0]->cubierta = $tarifa['cubierta'] ?? 0;
                $values[0]->sobrecubierta = $tarifa['sobrecubierta'] ?? 0;
                array_push($result, $values[0]);
            }
        }
        return $result;
    }
    

    public function datatable()
    {
        if ($this->request->isAJAX()) {
            $reqData = $this->request->getPost();

            $tarifa_manipulado_id = $reqData['tarifa_manipulado_id'] ?? 0;
            $tirada = $reqData['tirada'] ?? 0;
            $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
            $tipo = $reqData['tipo'] ?? null;
            
            
            $newTokenHash = csrf_hash();
            $csrfTokenName = csrf_token();

            if(is_null($tipo)){
                $values = $this->model->getPrecioTarifa($tarifa_manipulado_id, $tirada, $POD);
            }
            else{
                $solapas = $reqData['solapas'] ?? -1;
                $tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4;
                $values = $this->model->initPresupuesto($tipo_impresion_id, $solapas, $tirada, $POD);
            }

            $data = [
                'values' => $values,
                $csrfTokenName => $newTokenHash
            ];

            return $this->respond($data);

        } else {
            return $this->failUnauthorized('Invalid request', 403);
        }
    }

    public function getRowValues()
    {
        if ($this->request->isAJAX()) {
            $reqData = $this->request->getPost();

            $tarifa_manipulado_id = $reqData['tarifa_manipulado_id'] ?? 0;
            $tirada = $reqData['tirada'] ?? 0;
            $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
            
            $newTokenHash = csrf_hash();
            $csrfTokenName = csrf_token();

            $values = $this->model->getPrecioTarifa($tarifa_manipulado_id, $tirada, $POD);

            $data = [
                'values' => $values,
                $csrfTokenName => $newTokenHash
            ];

            return $this->respond($data);

        } else {
            return $this->failUnauthorized('Invalid request', 403);
        }
    }
}
