<?php

namespace App\Models;

use CodeIgniter\Model;

class ClienteMembresiaModel extends Model
{
    protected $table            = 'cliente_membresia';
    protected $primaryKey       = 'id_cm';
    protected $useAutoIncrement = true;
    protected $returnType       = 'App\Entities\ClienteMembresia';
    protected $useSoftDeletes   = false;
    protected $protectFields    = true;
    protected $allowedFields    = [
        'id_usuario',
        'id_membresia',
        'puntos',
        'fecha_inicio',
        'fecha_fin'
    ];

    protected $validationRules = [
        'id_usuario'   => 'required|integer',
        'id_membresia' => 'required|integer',
        'puntos'       => 'permit_empty|integer|greater_than_equal_to[0]',
        'fecha_inicio' => 'required|valid_date',
        'fecha_fin'    => 'permit_empty|valid_date',
    ];

    /**
     * Devuelve la membresía activa (vigente) de un usuario, con los datos del plan
     * (nombre, descuento_pct, etc.) ya unidos, o null si no tiene ninguna vigente.
     */
    public function getMembresiaActiva(int $id_usuario)
    {
        return $this->select('cliente_membresia.*, membresia.nombre AS membresia_nombre,
                membresia.descuento_pct, membresia.puntos_por_sol, membresia.precio_mensual')
            ->join('membresia', 'membresia.id_membresia = cliente_membresia.id_membresia')
            ->where('cliente_membresia.id_usuario', $id_usuario)
            ->groupStart()
                ->where('cliente_membresia.fecha_fin >=', date('Y-m-d'))
                ->orWhere('cliente_membresia.fecha_fin', null)
            ->groupEnd()
            ->orderBy('cliente_membresia.fecha_inicio', 'DESC')
            ->first();
    }
}
