<?php
namespace App\Controllers\Presupuestos;


use App\Controllers\BaseResourceController;

use App\Models\Collection;


use App\Models\Presupuestos\PresupuestoAcabadosModel;



class Presupuestoacabados extends \App\Controllers\BaseResourceController
{

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

    protected static $singularObjectName = 'Presupuesto acabado';
    protected static $singularObjectNameCc = 'presupuestoAcabado';
    protected static $pluralObjectName = 'Presupuestos acabado';
    protected static $pluralObjectNameCc = 'presupuestosAcabado';

    protected static $controllerSlug = 'presupuesto-acabados';

    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();
        if (count($postData->datos) > 0) {
            $this->model->deleteServiciosNotInArray($requestedId, $postData->datos);
        } else {
            $this->model->deleteAllServicios($requestedId);
        }

        if (count($postData->datos) > 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)
    {

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

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

        $result = $this->getServiciosAcabados($datos_tarifas, $tirada, $POD);

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

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

    public function getServiciosAcabados($datos_tarifas, $tirada, $POD)
    {

        $model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
        $result = [];
        if (count($datos_tarifas) > 0) {
            foreach ($datos_tarifas as $tarifa) {
                $proveedor = $tarifa['proveedor_id'] == '' ? -1 : $tarifa['proveedor_id'];

                $values = $model->getPrecioTarifa($tarifa['tarifa_id'], $tirada, $proveedor, $POD);
                $values[0]->cubierta = $tarifa['cubierta'] ?? 0;
                $values[0]->sobrecubierta = $tarifa['sobrecubierta'] ?? 0;
                $values[0]->faja = $tarifa['faja'] ?? 0;
                array_push($result, $values[0]);
            }
        }
        return $result;
    }

    public function cargar()
    {
        if ($this->request->isAJAX()) {
            $presupuesto_id = $this->request->getGet('presupuesto_id') ?? null;

            $rows = $this->model->getResource($presupuesto_id)->get()->getResultObject();

            $newTokenHash = csrf_hash();
            $csrfTokenName = csrf_token();
            $data = [
                'rows' => $rows,
                $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_acabado_id = $reqData['tarifa_acabado_id'] ?? 0;
            $tirada = $reqData['tirada'] ?? 0;
            $proveedor_id = $reqData['proveedor_id'] ?? -1;
            $POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;

            $isTarifa = $reqData['isTarifa'] ?? 0;

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

            $data = [];

            if ($isTarifa == 1) {
                $values = $this->model->getPrecioTarifa($tarifa_acabado_id, $tirada, $proveedor_id, $POD);
                $values[0]->tarifa_id = $tarifa_acabado_id;
                array_push($data, $values[0]);
            } 
            else {


                $model = model('App\Models\Tarifas\Acabados\TarifasAcabadoServiciosAcabadoModel');
                $tarifas = $model->getTarifasForServicio($tarifa_acabado_id);

                foreach ($tarifas as $tarifa) {
                    $values = $this->model->getPrecioTarifa($tarifa, $tirada, $proveedor_id, $POD);
                    $values[0]->tarifa_id = $tarifa;
                    array_push($data, $values[0]);
                }
            }

            //$values = $this->model->getPrecioTarifa($tarifa_acabado_id, $tirada, $proveedor_id, $POD);

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

            return $this->respond($data);

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

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

            $cubierta = $this->request->getGet("cubierta") ?? 0;
            $sobrecubierta = $this->request->getGet("sobrecubierta") ?? 0;
            $cliente = $this->request->getGet("cliente") ?? 0;

            $model = model('App\Models\Tarifas\Acabados\ServicioAcabadoModel');
            $query = $model->builder()->select(
                [
                    "id",
                    "nombre as name"
                ]
            )
                ->where("servicios_acabado.deleted_at", null);


            if ($cubierta == 1) {
                $query->where("servicios_acabado.acabado_cubierta", 1);
            } else if ($sobrecubierta == 1) {
                $query->where("servicios_acabado.acabado_sobrecubierta", 1);
            }

            if ($cliente == 1) {
                $query->where("servicios_acabado.mostrar_en_presupuesto_cliente", 1);
            }
            if ($this->request->getGet("q")) {
                $query->groupStart()
                    ->orLike("servicios_acabado.nombre", $this->request->getGet("q"))
                    ->groupEnd();
            }

            $items = $query->get()->getResultObject();
            // add a custom item at the beginning
            $customItem = new \stdClass;
            $customItem->id = 0;
            $customItem->name = "Ninguno";
            array_unshift($items, $customItem);

            return $this->response->setJSON($items);

        } 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;
                $tirada = $reqData['tirada'] ?? 0;

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

                $menu = $this->model->getProveedoresForSelector($tarifa_id, $tirada);

                $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);
        }
    }


}
