<?php

namespace App\Services\Administracion\Crud;

use App\Models\Embarcacion;
use App\Models\Sitio;
use App\Rules\EmbarcacionRules;

class EmbarcacionesCrudService extends CrudEntityService
{
    protected string $entity = 'embarcaciones';

    protected string $modelClass = Embarcacion::class;

    protected array $entityLabels = [
        'singular' => 'Embarcacion',
        'plural' => 'Embarcaciones',
        'create' => 'Nueva Embarcacion',
    ];

    protected array $tableColumns = ['imo', 'nombre', 'responsable', 'tipo_buque', 'bandera', 'activo'];

    protected array $tableLabels = [
        'imo' => 'IMO',
        'nombre' => 'Nombre',
        'responsable' => 'Responsable',
        'tipo_buque' => 'Tipo de Buque',
        'bandera' => 'Bandera',
        'activo' => 'Estado',
    ];

    protected array $formLabels = [
        'imo' => 'IMO',
        'nombre' => 'Nombre',
        'tipo_buque' => 'Tipo de Buque',
        'responsable' => 'Responsable',
        'bandera' => 'Bandera',
        'ubicacion' => 'Ubicación',
        'cantidad_personas' => 'Cant. Personas',
        'activo' => 'Estado',
    ];

    protected array $searchColumns = ['imo', 'nombre', 'tipo_buque', 'bandera', 'ubicacion'];

    protected ?string $searchPlaceholder = 'Buscar por IMO, nombre, tipo, bandera o ubicacion';

    protected array $editableColumns = ['imo', 'nombre', 'tipo_buque', 'responsable', 'bandera', 'ubicacion', 'cantidad_personas', 'activo'];

    protected array $importLookupColumns = ['nombre'];

    protected function validationRules(bool $isUpdate = false, ?int $id = null): array
    {
        return EmbarcacionRules::rules($isUpdate, $id);
    }

    protected function fieldOptions(): array
    {
        return [
            'tipo_buque' => [
                'REMOLCADOR' => 'Remolcador',
                'GRANELERO' => 'Granelero',
                'BULK CARRIER' => 'Bulk Carrier',
                'OTRO' => 'Otro',
            ],
            'activo' => [1 => 'Activo', 0 => 'Inactivo'],
            'ubicacion' => Sitio::query()
                ->whereNotNull('nombre')
                ->where('nombre', '!=', '')
                ->orderBy('nombre')
                ->pluck('nombre', 'nombre')
                ->toArray(),
        ];
    }

    protected function applyEntityDefaultValues(array &$defaults): void
    {
        if (array_key_exists('cantidad_personas', $defaults)) {
            $defaults['cantidad_personas'] = 1;
        }
    }
}