<?php

declare(strict_types=1);

namespace App\Controllers;

use App\Helpers\Response;
use App\Models\MaterialCategory;

class MaterialCategoryController extends BaseController
{
    private MaterialCategory $model;

    public function __construct($request)
    {
        parent::__construct($request);
        $this->model = new MaterialCategory();
    }

    public function index(): void
    {
        $cats = $this->model->findAllActive();
        Response::success($cats, 'Categorías consultadas correctamente');
    }

    public function store(): void
    {
        $data = $this->request->body();
        $name = trim($data['name'] ?? '');
        if (empty($name)) {
            Response::error('El nombre es obligatorio', 422);
            return;
        }
        $id = $this->model->create(['name' => $name]);
        Response::created($this->model->findById($id), 'Categoría creada correctamente');
    }

    public function update(): void
    {
        $id = (int) $this->getRouteParam('id');
        $data = $this->request->body();
        $cat = $this->model->findById($id);
        if (!$cat) {
            Response::error('Categoría no encontrada', 404);
            return;
        }
        $name = trim($data['name'] ?? '');
        if (empty($name)) {
            Response::error('El nombre es obligatorio', 422);
            return;
        }
        $this->model->update($id, ['name' => $name]);
        Response::success($this->model->findById($id), 'Categoría actualizada correctamente');
    }

    public function destroy(): void
    {
        $id = (int) $this->getRouteParam('id');
        $cat = $this->model->findById($id);
        if (!$cat) {
            Response::error('Categoría no encontrada', 404);
            return;
        }
        $this->model->delete($id);
        Response::success(null, 'Categoría eliminada correctamente');
    }
}
