<?php

namespace App\Controllers;

use CodeIgniter\Exceptions\PageNotFoundException;

use App\Models\RespuestasModel;
use App\Models\OrganizacionModel;
use App\Models\RespuestasHistorialModel;
use App\Models\UsuarioModel;

class Organizacion extends BaseController
{
    protected $organizacionModel;
    protected $respuestasModel;
    protected $respuestasHistorialModel;
    protected $usuarioModel;
    public function __construct()
    {
        $this->organizacionModel = new OrganizacionModel();
        $this->respuestasModel = new RespuestasModel();
        $this->respuestasHistorialModel = new RespuestasHistorialModel();
        $this->usuarioModel = new UsuarioModel();
    }

    public function index(): string
    {
        permiso('Organización','Visualizar mi organización',true);
        $organizacion=null;
        if (session()->get('usuario')["organizacion_id"]!=null) {
           $organizacion= $this->organizacionModel->find(session()->get('usuario')["organizacion_id"]);
        }
        if ($organizacion==null) {
            die('No existe la organización de este usuario');
        }
        $data["usuarios"]=$this->usuarioModel->usuariosOrganizacion($organizacion["id"]);
        $data["organizacion"]=$organizacion;
        return view('organizacion/index',$data);
    }

    public function admin(): string
    {
        permiso('Organización','Visualizar',true);
        return view('organizacion/admin');
    }

    public function create()
    {
        permiso('Organización','Crear',true);
        $data = [];
        return view('organizacion/create',$data);
    }

    public function store()
    {
        permiso('Organización','Crear',true);
        $data = $this->request->getPost();

     
        $existeNombre = $this->organizacionModel->where('nombre', $data['nombre'])->where('deleted_at',null)->first();
      
        if ($existeNombre) {
            return $this->response->setJSON([
                'success' => false,
                'message' => 'El nombre ya está registrado.'
            ]);
            die();
        }
     
        $this->organizacionModel->save($data);
        $id = $this->organizacionModel->insertID();
        $respuesta=[
            "uniqid"=>uniqid(),
            "item"=>"organizacion",
            "item_id"=>$id,
            "data"=>null,
            "formulario_id"=>1,
            "estado"=>"Por llenar",
            "usuario_id"=>session()->get('usuario')["id"]
        ];
        $this->respuestasModel->save($respuesta);
        $respuesta_id = $this->respuestasModel->insertID();
        $this->organizacionModel->update($id, ["ficha_id"=>$respuesta_id]);

        return $this->response->setJSON([
                'success' => true,
                'message' => 'Organizacion creado correctamente.',
                'data' => [
                    'organizacion' => $data
                ]
            ]);
    }

    public function edit($id)
    {
        permiso('Organización','Editar',true);
        $data['organizacion'] = $this->organizacionModel->find($id);
        $respuesta_id=$data["organizacion"]["ficha_id"];
        $data["historial"]=$this->respuestasHistorialModel->getByRespuestaIdDesc($respuesta_id);
        $data["usuarios"]=$this->usuarioModel->usuariosOrganizacion($data['organizacion']["id"]);
        return view('organizacion/edit', $data);
    }

    public function update($id)
    {
        permiso('Organización','Editar',true);
        $data = $this->request->getPost();

   
        $existeNombre = $this->organizacionModel->where('nombre', $data['nombre'])->where('id !=',$id)->where('deleted_at',null)->first();
      
        if ($existeNombre) {
            return $this->response->setJSON([
                'success' => false,
                'message' => 'El nombre ya está registrado.'
            ]);
            die();
        }
        
        $organizacion=[
            "nombre"=>$data['nombre'],
            "activo"=>$data['activo']
        ];

       
        $this->organizacionModel->update($id, $organizacion);

        return $this->response->setJSON([
                'success' => true,
                'message' => 'Organizacion editado correctamente.',
                'data' => [
                    'organizacion' => $data
                ]
            ]);
    }

    public function delete($id)
    {
        permiso('Organización','Eliminar',true);
        $this->organizacionModel->delete($id);
        return redirect()->to('/organizacion')->with('success', 'Organizacion eliminada.');
    }


    public function datatable()
    {
        permiso('Organización','Visualizar',true);
        $json = $this->organizacionModel->getDatatable($this->request);
        return $this->response->setJSON($json);
    }

}
