<?php

namespace App\Controllers\Admin;

use App\Controllers\BaseController;
use App\Models\MembresiaModel;
use App\Entities\Membresia;

class Membresias extends BaseController
{
    public function index()
    {
        $model = new MembresiaModel();
        $q = $this->request->getGet('q');

        $builder = $model;
        if (!empty($q)) {
            $builder = $model->like('nombre', $q);
        }

        $membresias = $builder->paginate(10, 'default');

        return view('admin/membresias/index', [
            'membresias' => $membresias,
            'pager'      => $model->pager,
            'q'          => $q
        ]);
    }

    public function crear()
    {
        return view('admin/membresias/crear');
    }

    public function guardar()
    {
        $model = new MembresiaModel();

        if (!$this->validate($model->validationRules)) {
            return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
        }

        $membresia = new Membresia();
        $membresia->nombre = $this->request->getPost('nombre');
        $membresia->descuento_pct = $this->request->getPost('descuento_pct');
        $membresia->puntos_por_sol = $this->request->getPost('puntos_por_sol');
        $membresia->precio_mensual = $this->request->getPost('precio_mensual');

        if ($model->save($membresia)) {
            return redirect()->to(base_url('admin/membresias'))->with('success', 'Membresía guardada correctamente.');
        }

        return redirect()->back()->withInput()->with('error', 'No se pudo guardar la membresía.');
    }

    public function editar($id)
    {
        $model = new MembresiaModel();
        $membresia = $model->find($id);

        if (!$membresia) {
            return redirect()->to(base_url('admin/membresias'))->with('error', 'Membresía no encontrada.');
        }

        return view('admin/membresias/editar', [
            'membresia' => $membresia
        ]);
    }

    public function actualizar($id)
    {
        $model = new MembresiaModel();
        $membresia = $model->find($id);

        if (!$membresia) {
            return redirect()->to(base_url('admin/membresias'))->with('error', 'Membresía no encontrada.');
        }

        if (!$this->validate($model->validationRules)) {
            return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
        }

        $membresia->nombre = $this->request->getPost('nombre');
        $membresia->descuento_pct = $this->request->getPost('descuento_pct');
        $membresia->puntos_por_sol = $this->request->getPost('puntos_por_sol');
        $membresia->precio_mensual = $this->request->getPost('precio_mensual');

        if ($model->save($membresia)) {
            return redirect()->to(base_url('admin/membresias'))->with('success', 'Membresía actualizada correctamente.');
        }

        return redirect()->back()->withInput()->with('error', 'No se pudo actualizar la membresía.');
    }

    public function eliminar($id)
    {
        $model = new MembresiaModel();
        if ($model->delete($id)) {
            return redirect()->to(base_url('admin/membresias'))->with('success', 'Membresía eliminada correctamente.');
        }
        return redirect()->to(base_url('admin/membresias'))->with('error', 'No se pudo eliminar la membresía (puede estar en uso).');
    }
}
