# CMS — Formulário de Criação/Edição

## Arquivos

- `resources/views/prefecture/contents/diario-oficial/create.blade.php` — Wrapper
- `resources/views/prefecture/contents/diario-oficial/form.blade.php` — Campos

## Fluxo

```
create.blade.php
    ↓
Form::open(['files' => true])
    ↓
form.blade.php (todos os campos)
    ↓
[Visualizar] [Salvar]
    ↓
Modal de Preview (DiarioOficialComponent)
```

## Campos do Formulário

### Dados Básicos

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|:-----------:|-----------|
| Edição | `number` | ✅ | Número sequencial |
| Autor | `text` | ✅ | Nome do responsável |
| E-mail | `text` | ✅ | Email do responsável |
| Certificado | `select` | ✅ | Certificado digital (A1/A3) |
| Complemento | `select` | ❌ | Auto-relacionamento com outro diário |
| Data de Publicação | `date` (mask br-data) | ✅ | Data com máscara dd/mm/aaaa |
| Lei Validadora | `textarea` | ❌ | Lei de validação |
| Imagem de Capa | `image upload` | ❌ | Imagem de destaque (Archive) |

### Layout Visual

| Campo | Tipo | Opções | Descrição |
|-------|------|--------|-----------|
| Colunas | `radio` (imagem) | 1 coluna / 2 colunas | Define layout do PDF |
| Linha Separadora | `radio` | Com linha / Sem linha | Linha entre seções (oculto se 1 coluna) |
| Estilo da Linha | `select` | Sólida / Tracejada / Pontilhada | Visível se "Com linha" |
| Cor da Linha | `color` | Hexadecimal | Visível se "Com linha" |

### Status

| Campo | Tipo | Descrição |
|-------|------|-----------|
| Publicar Diário? | `checkbox` | Status do diário (visível conforme permissão `diario-oficial.inactivate`) |

## Lógica de Permissão do Status

```php
$user = Sentinel::getUser();
$permissions = $user->roles[0]->permissions;
array_key_exists('diario-oficial.inactivate', $permissions) || empty($permissions)
    ? ($ativar_diario = true)
    : ($ativar_diario = false);
```

- Super-admin e usuários com permissão `diario-oficial.inactivate` podem alterar status.
- Para os demais, o checkbox não é exibido.

## Preview (Modal)

Após o formulário, ao editar:

```php
$component = new \App\Http\Components\Prefecture\Contents\Components\Preview\DiarioOficialComponent('Dados do Diário Oficial');
echo $component->render();
```

O modal de preview é aberto ao clicar em "Visualizar". O fluxo:

1. `create.blade.php` captura o ID da URL
2. Faz fetch para `/refresh-diario-preview/{id}` (regenera o PDF)
3. Carrega o PDF em um iframe apontando para `/cms/diario-oficial/{id}`
4. Oferece botão de impressão

## Gestão de Matérias (Áreas)

No modo de **edição** (`isset($data)`), o formulário inclui:

```blade
@isset($data)
    @include('prefecture.contents.diario-oficial.modal.areas.index')
@endisset
```

Isso carrega o modal que permite:
- Listar matérias do diário
- Adicionar novas matérias (texto ou PDF)
- Editar/excluir matérias
- Reordenar (drag & drop via sort)

## Scripts Carregados

```blade
<!-- Summernote -->
<script src="{{ url('assets/plugins/summernote/summernote-diario.js') }}"></script>
<script src="{{ url('assets/plugins/summernote/summernote-pt-BR.js') }}"></script>
<script src="{{ url('assets/js/custom/utilities/richtext/summernote.js') }}"></script>

<!-- Editor de Imagem (Crop) -->
<script src="{{ url('assets/js/modulos/cropper-min.js') }}" defer></script>
<script src="{{ url('assets/js/custom/utilities/helpers/editor-de-imagem.js') }}" defer></script>
<script src="{{ url('assets/js/custom/utilities/helpers/select-image.js') }}" defer></script>

<!-- Preview -->
<script src="{{ url('assets/js/custom/utilities/helpers/preview-diario.js') }}?v=0.0.2"></script>
```

## Validação (Backend)

`app/Http/Requests/DiarioOficialRequest.php`

```php
public function rules() {
    return [
        'edicao'          => 'required',
        'autor'           => 'required',
        'email'           => 'required',
        'data_publicacao' => 'required',
        'lei_validadora'  => 'nullable',
        'id_certificado'  => [new SelectRule],
        'columns_number'  => ['nullable', 'numeric', 'in:1,2,3'],
    ];
}
```
