<?php

namespace App\Controllers;

use App\Models\DepartamentoModel;
use App\Models\EncuestaModel;
use App\Models\EscuelaModel;
use App\Models\HorasModel;
use App\Models\PrestadorModel;
use App\Models\PrestadorSolicitudModel;
use App\Models\UserModel;
use PHPUnit\Framework\MockObject\Stub\ReturnReference;

class Prestador extends BaseController
{

    public function index()
    {
        $horasModel = model(HorasModel::class);
        $segundosDiarios = model(HorasModel::class)->getHoras(user()->idprestador);

        $segundosMensuales = $horasModel->getSegundosMensuales(user()->idprestador);

        $segundosTotal = array_reduce($segundosMensuales, function ($carry, $item) {
            return $carry + $item['segundos'];
        }, 0);

        // Consultar encuestas disponibles
        $encuestaModel = model(EncuestaModel::class);
        $horasARealizar = model(PrestadorModel::class)->find(user()->idprestador)['horas_servicio'];
        $porcentajeRealizado = $segundosTotal / ($horasARealizar * 1000);

        $encuestas = $encuestaModel->getPrestadorEncuestas($porcentajeRealizado);

        $data = [
            'segundosMensuales' => $segundosMensuales,
            'horasTotales' => $segundosTotal / 3600,
            'segundosDiarios' => $segundosDiarios,
            'encuestas' => $encuestas,
        ];

        return view('Prestador/index', $data);
    }

    public function horas()
    {
        $data = [
            'horas' => model(HorasModel::class)->getHoras(user()->idprestador),
        ];
        return view('Prestador/table', $data);
    }

    public function formulario()
    {
        $prestadorModel = new PrestadorSolicitudModel();

        // Guardar/actualizar registro
        if ($this->request->getMethod() === 'post') {
            $data = $this->request->getPost();

            // En caso de que se actualice el registro, se tiene que agregar el id
            if (user()->rh_prestador_solicitud_id) {
                $data['id'] = user()->rh_prestador_solicitud_id;
            }

            // Poner status de revisión (0)
            $data['status'] = 0;

            // Validar datos
            if (!$prestadorModel->save($data)) {
                return redirect()->back()->withInput()->with('errors', $prestadorModel->errors());
            }

            // Guardar id de prestador_solicitud en el registro del usuario (solo para nuevos registros, no actualizaciones)
            if (!user()->rh_prestador_solicitud_id) {
                $userModel = new UserModel();
                $userModel->update(user_id(), [
                    'rh_prestador_solicitud_id' => $prestadorModel->getInsertID()
                ]);
            }

            return view('Prestador/success');
        }

        $data = [
            'email' => user()->email,
            'escuelas' =>  model(EscuelaModel::class)->getEscuelas(),
            'departamentos' =>  model(DepartamentoModel::class)->getDepartamentos(),
            'datos' => user()->rh_prestador_solicitud_id ? $prestadorModel->find(user()->rh_prestador_solicitud_id) : null,
        ];

        return view('Prestador/formulario_inicial', $data);
    }
}
