<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreDeliveryRequest extends FormRequest
{
    public function authorize(): bool
    {
        return $this->user()?->role === 'cliente';
    }

    /**
     * @return array<string, mixed>
     */
    public function rules(): array
    {
        return [
            'categoria' => ['required', 'string', 'in:Refeições,Supermercado,Medicamentos,Documentos,Encomendas,Outros'],

            // Pontos de referência (preferencial) — ou texto livre como fallback.
            'origemReferenciaId' => ['nullable', 'uuid', 'exists:locations,id'],
            'destinoReferenciaId' => ['nullable', 'uuid', 'exists:locations,id', 'different:origemReferenciaId'],
            'origem' => ['required_without:origemReferenciaId', 'nullable', 'string', 'max:255'],
            'destino' => ['required_without:destinoReferenciaId', 'nullable', 'string', 'max:255'],

            // Destinatário
            'destinatarioNome' => ['required', 'string', 'max:255'],
            'destinatarioTelefone' => ['required', 'string', 'max:30'],

            // Detalhes do pacote
            'descricao' => ['nullable', 'string', 'max:1000'],
            'tamanho' => ['required', 'in:pequeno,medio,grande'],
            'peso' => ['nullable', 'numeric', 'min:0', 'max:1000'],
            'valorDeclarado' => ['nullable', 'numeric', 'min:0'],
            'fragil' => ['boolean'],

            // Pagamento — preço é calculado no servidor quando há pontos de referência.
            'precoEstimado' => ['required_without:origemReferenciaId', 'nullable', 'numeric', 'min:0'],
            'metodoPagamento' => ['required', 'in:numerario,mpesa,cartao'],
            'pagador' => ['required', 'in:remetente,destinatario'],

            // Agendamento + referências
            'agendadoPara' => ['nullable', 'string', 'max:60'],
            'referenciaRecolha' => ['nullable', 'string', 'max:255'],
            'referenciaEntrega' => ['nullable', 'string', 'max:255'],
            'instrucoes' => ['nullable', 'string', 'max:1000'],
        ];
    }
}
