<?php

namespace App\Services\Administracion\Crud;

use App\Models\SolicitudBien;
use Illuminate\Database\Eloquent\Builder;

class SolicitudesBienesCrudService extends CrudEntityService
{
    protected string $entity = 'solicitudes-bienes';

    protected string $modelClass = SolicitudBien::class;

    protected array $entityLabels = [
        'singular' => 'Solicitud de Bienes',
        'plural' => 'Solicitudes de Bienes',
        'create' => 'Nueva Solicitud de Bienes',
    ];

    protected array $tableColumns = [
        'numero_solicitud',
        'solicitante_cedula',
        'estado',
        'articulos_count',
        'unidades_count',
        'fecha_solicitud',
    ];

    protected array $tableLabels = [
        'numero_solicitud' => 'Solicitud',
        'solicitante_cedula' => 'Cédula',
        'estado' => 'Estado',
        'articulos_count' => 'Artículos',
        'unidades_count' => 'Unidades',
        'fecha_solicitud' => 'Fecha de solicitud',
    ];

    protected array $formLabels = [
        'numero_solicitud' => 'Solicitud',
        'solicitante_cedula' => 'Cédula solicitante',
        'solicitante_cargo' => 'Cargo solicitante',
        'estado' => 'Estado',
        'articulos_count' => 'Artículos',
        'unidades_count' => 'Unidades',
        'detalle_json' => 'Detalle JSON',
        'observaciones' => 'Observaciones',
        'fecha_solicitud' => 'Fecha de solicitud',
    ];

    protected array $searchColumns = [
        'numero_solicitud',
        'solicitante_cedula',
        'estado',
    ];

    protected ?string $searchPlaceholder = 'Buscar por solicitud, solicitante, cédula o estado';

    protected array $editableColumns = [
        'numero_solicitud',
        'solicitante_cedula',
        'solicitante_cargo',
        'estado',
        'articulos_count',
        'unidades_count',
        'detalle_json',
        'observaciones',
        'fecha_solicitud',
    ];

    protected ?array $defaultSort = ['fecha_solicitud', 'desc'];

    public function isReadOnly(): bool
    {
        return true;
    }

    protected function configureIndexQuery(Builder $query, \Illuminate\Database\Eloquent\Model $model): void
    {
        parent::configureIndexQuery($query, $model);
        $query->orderByDesc('fecha_solicitud')->orderByDesc('id');
    }

    protected function fieldOptions(): array
    {
        return [
            'estado' => [
                'pendiente' => 'Pendiente',
                'generada' => 'Generada',
                'recibida' => 'Recibida',
                'anulada' => 'Anulada',
            ],
        ];
    }
}