@php
/**
* Modal de lançamento — o MESMO arquivo para cadastrar e para editar.
*
* Recebe:
* $modalId id único do modal (o alvo do data-bs-target da listagem)
* $entry null para cadastro; o lançamento para edição
* $operation o lado do caixa, que vem da ROTA e nunca do formulário
* $month o mês aberto na listagem, usado como data padrão
*
* REEXIBIR APÓS ERRO: `form_id` viaja como campo escondido para que, ao
* voltar com erros de validação, a tela saiba QUAL dos modais reabrir — sem
* ele, o usuário veria a listagem com uma mensagem de erro e nenhum
* formulário aberto, e concluiria que a tela está quebrada.
*/
$isEdit = $entry !== null;
$wasSubmitted = $errors->any() && old('form_id') === $modalId;
// A data padrão é o dia de HOJE quando o mês aberto é o corrente, e o
// primeiro dia do mês quando o usuário está navegando por outro: lançar em
// agosto olhando agosto não deve trazer a data de julho.
$defaultDate = $month->isSameMonth(now()) ? now() : $month->copy()->startOfMonth();
$value = $isEdit ? number_format($entry->amount / 100, 2, ',', '.') : '';
$dueDate = $isEdit ? $entry->due_date->format('Y-m-d') : $defaultDate->format('Y-m-d');
// Os campos opcionais (observação, anexo, tags) começam ESCONDIDOS atrás dos
// botões do rodapé, como na referência — mas aparecem já abertos quando o
// lançamento tem conteúdo neles, ou quando o usuário acabou de digitar algo
// e a validação recusou. Um campo preenchido escondido é conteúdo perdido.
$notesValue = $wasSubmitted ? old('notes') : ($entry->notes ?? '');
$tagsValue = $wasSubmitted ? old('tags') : ($isEdit ? App\Support\FinancialTags::toInput($entry) : '');
$showNotes = filled($notesValue);
$showTags = filled($tagsValue);
$showReceipt = $isEdit && $entry->hasReceipt();
$showRepeat = $wasSubmitted && filled(old('repeat'));
// A categoria nova NÃO é reexibida na edição (ela já virou categoria de
// verdade e está selecionada no select); só volta quando o usuário acabou de
// digitá-la e a validação recusou o envio.
$newCategoryValue = $wasSubmitted ? old('new_category') : '';
$showNewCategory = filled($newCategoryValue);
// Um lançamento que faz parte de uma série precisa perguntar o ALCANCE da
// edição antes de gravar. Sem série, a pergunta não existe.
$isRecurring = $isEdit && $entry->financial_recurrence_id !== null;
@endphp
{{-- `multipart/form-data` porque o anexo é um upload de arquivo.
Sem isto o campo chega vazio ao servidor, sem erro nenhum. --}}