<?php

namespace App\Models;

use CodeIgniter\Model;

class PeliculaModel extends Model
{
    protected $table            = 'pelicula';
    protected $primaryKey       = 'id_pelicula';
    protected $useAutoIncrement = true;
    protected $returnType       = 'App\Entities\Pelicula';
    protected $useSoftDeletes   = false;
    protected $protectFields    = true;
    protected $allowedFields    = [
        'id_genero',
        'titulo',
        'sinopsis',
        'duracion_min',
        'clasificacion',
        'idioma',
        'poster_url',
        'trailer_url',
        'estado'
    ];

    // Dates
    protected $useTimestamps = false;

    // Validation
    protected $validationRules      = [
        'id_genero'     => 'required|integer',
        'titulo'        => 'required|min_length[2]|max_length[200]',
        'sinopsis'      => 'permit_empty',
        'duracion_min'  => 'required|integer|greater_than[0]',
        'clasificacion' => 'required|in_list[G,PG,PG-13,R,NC-17]',
        'idioma'        => 'required|min_length[2]|max_length[50]',
        'poster_url'    => 'permit_empty|max_length[500]',
        'trailer_url'   => 'permit_empty|max_length[500]',
        'estado'        => 'permit_empty|in_list[0,1]'
    ];
    protected $skipValidation       = false;

    /**
     * Obtiene películas con el nombre de su género mediante un JOIN.
     * Retorna objetos Entity de tipo Pelicula con el atributo dinámico 'genero_nombre'.
     */
    public function getPeliculasConGenero(int $id_pelicula = null)
    {
        $builder = $this->select('pelicula.*, genero.nombre as genero_nombre')
                        ->join('genero', 'genero.id_genero = pelicula.id_genero');

        if ($id_pelicula !== null) {
            return $builder->where('pelicula.id_pelicula', $id_pelicula)->first();
        }

        return $builder->findAll();
    }
}
