<?php
namespace App\Controllers\Presupuestos;


use App\Controllers\BaseResourceController;

use App\Models\Collection;

use App\Models\Presupuestos\PresupuestoEncuadernacionesModel;
use DataTables\Editor;
use DataTables\Editor\Field;
use DataTables\Editor\Validate;

class Presupuestoencuadernaciones extends \App\Controllers\BaseResourceController
{

    protected $modelName = PresupuestoEncuadernacionesModel::class;
    protected $format = 'json';

    protected static $singularObjectName = 'Presupuesto encuadernaciones';
    protected static $singularObjectNameCc = 'presupuestoEncuadernaciones';
    protected static $pluralObjectName = 'Presupuestos encuadernaciones';
    protected static $pluralObjectNameCc = 'presupuestosEncuadernaciones';

    protected static $controllerSlug = 'presupuesto-encuadernaciones';

    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 update($requestedId = null)
    {
        $tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel');

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

        $postData = $this->request->getPost();
        $datos_tarifas = $postData['datos'] ?? [];
        $tirada = $postData['tirada'] ?? 0;
        $paginas = $postData['paginas'] ?? 0;
        $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
        $ancho = $postData['ancho'] ?? 0;
        $alto = $postData['alto'] ?? 0;
        
        $result = $this->getServiciosEncuadernacion($datos_tarifas, $tirada, $paginas, $ancho, $alto, $POD);

        $newTokenHash = csrf_hash();
        $csrfTokenName = csrf_token();
        $data = [
            'lineas' => $result,
            $csrfTokenName => $newTokenHash
        ];

        return $this->respond($data);
    }

    public function getServiciosEncuadernacion($datos_tarifas, $tirada, $paginas, $ancho, $alto, $POD)
    {
        $result = [];
        $tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel');
        $model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
        

        if (count($datos_tarifas) > 0) {
            foreach ($datos_tarifas as $tarifa) {
                if ($tarifaModel->isTarifaPorHoras($tarifa['tarifa_id'])) {
                    $values = $model->getPrecioTarifaHoras($tarifa['tarifa_id'], $paginas, $tirada, -1, $POD);
                } else {
                    $values = $model->getPrecioTarifa($tarifa['tarifa_id'], $paginas, $tirada, $ancho, $alto, -1, $POD);
                }
                array_push($result, $values[0]);
            }
        }
        return $result;
    }


    public function datatable()
    {
        if ($this->request->isAJAX()) {
            $reqData = $this->request->getPost();
            $tipo = $reqData['tipo'] ?? null;
            if (is_null($tipo) || $tipo == 'tarifa') {
                $tarifa_encuadernacion_id = $reqData['tarifa_encuadernacion_id'] ?? 0;
                $proveedor_id = $reqData['proveedor_id'] ?? 0;
            } else {
                $solapas = $reqData['solapas'] ?? 0;
            }
            $paginas = $reqData['paginas'] ?? 0;
            $tirada = $reqData['tirada'] ?? 0;
            $ancho = $reqData['ancho'] ?? 0;
            $alto = $reqData['alto'] ?? 0;

            $POD = $reqData['POD'] ?? 0;
            $paginas_cuadernillo = $reqData['paginas_por_cuadernillo'] ?? null;

            $newTokenHash = csrf_hash();
            $csrfTokenName = csrf_token();

            $tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel');
            if (is_null($tipo)) {
                if ($tarifaModel->isTarifaPorHoras($tarifa_encuadernacion_id)) {
                    $values = $this->model->getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD, $paginas_cuadernillo);
                } else {
                    $values = $this->model->getPrecioTarifa($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto, $proveedor_id, $POD);
                }
            } else if ($tipo == 'tarifa') {
                if ($tarifaModel->isTarifaPorHoras($tarifa_encuadernacion_id)) {
                    $values = $this->model->getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, -1, $POD);
                } else {
                    $values = $this->model->getPrecioTarifa($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto, -1, $POD);
                }
            } else {
                $tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4;
                $values = $this->model->initPresupuesto($tipo_impresion_id, $solapas, $tirada, $paginas, $ancho, $alto, $POD);
            }

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

            return $this->respond($data);


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

    public function getRowValues()
    {
        if ($this->request->isAJAX()) {

            $tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel');

            $reqData = $this->request->getPost();

            $tarifa_enc_id = $reqData['tarifa_enc_id'] ?? 0;
            $tirada = $reqData['tirada'] ?? 0;
            $paginas = $reqData['paginas'] ?? 0;
            $ancho = $reqData['ancho'] ?? 0;
            $alto = $reqData['alto'] ?? 0;
            $proveedor_id = $reqData['proveedor_id'] ?? -1;
            $paginas_cuadernillo = $reqData['paginas_por_cuadernillo'] ?? 32;
            $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;


            $newTokenHash = csrf_hash();
            $csrfTokenName = csrf_token();

            if ($tarifaModel->isTarifaPorHoras($tarifa_enc_id)) {
                $values = $this->model->getPrecioTarifaHoras($tarifa_enc_id, $paginas, $tirada, $proveedor_id, $POD, $paginas_cuadernillo);
            } else {
                $values = $this->model->getPrecioTarifa($tarifa_enc_id, $paginas, $tirada, $ancho, $alto, $proveedor_id, $POD);
            }

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

            return $this->respond($data);

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


    public function menuItems()
    {
        if ($this->request->isAJAX()) {

            $reqData = $this->request->getPost();
            try {

                $tarifa_id = $reqData['tarifa_id'] ?? -1;
                $paginas = $reqData['paginas'] ?? 0;
                $tirada = $reqData['tirada'] ?? 0;
                $ancho = $reqData['ancho'] ?? 0;
                $alto = $reqData['alto'] ?? 0;
                $paginas_cuadernillo = $reqData['paginas_por_cuadernillo'] ?? 32;

                $newTokenHash = csrf_hash();
                $csrfTokenName = csrf_token();

                $menu = $this->model->getProveedoresForSelector($tarifa_id, $paginas, $tirada, $ancho, $alto, $paginas_cuadernillo);

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

            } catch (Exception $e) {
                $data = [
                    'error' => $e,
                    $csrfTokenName => $newTokenHash
                ];
            } finally {
                return $this->respond($data);
            }

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


}
