# Referência da API

## 📚 @seniorsistemas/components-ai

Documentação completa da API da biblioteca.

---

## 🎨 Componentes

### DynamicFormComponent

Componente de formulário dinâmico.

#### Seletor
```typescript
sia-dynamic-form
```

#### Propriedades

| Propriedade | Tipo | Padrão | Descrição |
|------------|------|--------|-----------|
| `formFields` | `DynamicFormFieldConfig[]` | `[]` | Configuração dos campos (modo direto) |
| `formSections` | `DynamicFormSection[]` | `[]` | Configuração com seções |
| `entity` | `any` | `null` | Entidade para edição |
| `mode` | `'create' \| 'edit' \| 'filter' \| 'inline-edit'` | `'create'` | Modo do formulário |
| `displayMode` | `'inline' \| 'dialog' \| 'drawer'` | `'inline'` | Modo de exibição |
| `visible` | `boolean` | `false` | Visibilidade (dialog/drawer) |
| `dialogHeader` | `string` | `''` | Título do dialog/drawer |
| `submitButtonLabel` | `string` | `'Salvar'` | Label do botão submit |
| `cancelButtonLabel` | `string` | `'Cancelar'` | Label do botão cancelar |

#### Eventos

| Evento | Tipo | Descrição |
|--------|------|-----------|
| `onSubmit` | `EventEmitter<any>` | Emitido ao submeter o formulário |
| `onCancel` | `EventEmitter<void>` | Emitido ao cancelar |
| `visibleChange` | `EventEmitter<boolean>` | Two-way binding de visibilidade |

#### Métodos Públicos

```typescript
getForm(): FormGroup
```
Retorna o FormGroup do formulário.

```typescript
resetForm(): void
```
Reseta o formulário para o estado inicial.

---

### ExportDialogComponent

Dialog para exportação de dados.

#### Seletor
```typescript
sia-export-dialog
```

#### Propriedades

| Propriedade | Tipo | Padrão | Descrição |
|------------|------|--------|-----------|
| `visible` | `boolean` | `false` | Visibilidade do dialog |
| `data` | `any[]` | `[]` | Dados para exportação |
| `columns` | `ColumnOption[]` | `[]` | Configuração das colunas |
| `fileName` | `string` | `'export'` | Nome do arquivo |

#### Eventos

| Evento | Tipo | Descrição |
|--------|------|-----------|
| `visibleChange` | `EventEmitter<boolean>` | Two-way binding de visibilidade |

---

### BulkDeleteDialogComponent

Dialog para exclusão em massa.

#### Seletor
```typescript
sia-bulk-delete-dialog
```

#### Propriedades

| Propriedade | Tipo | Padrão | Descrição |
|------------|------|--------|-----------|
| `visible` | `boolean` | `false` | Visibilidade do dialog |
| `selectedItems` | `any[]` | `[]` | Itens selecionados |
| `entityName` | `string` | `''` | Nome da entidade (singular) |
| `entityPluralName` | `string` | `''` | Nome da entidade (plural) |

#### Eventos

| Evento | Tipo | Descrição |
|--------|------|-----------|
| `visibleChange` | `EventEmitter<boolean>` | Two-way binding de visibilidade |
| `onConfirm` | `EventEmitter<void>` | Emitido ao confirmar exclusão |

---

### BreadcrumbComponent

Componente de navegação breadcrumb.

#### Seletor
```typescript
sia-breadcrumb
```

#### Propriedades

| Propriedade | Tipo | Padrão | Descrição |
|------------|------|--------|-----------|
| `items` | `MenuItem[]` | `[]` | Itens do breadcrumb |
| `home` | `MenuItem` | `null` | Item home |

---

## 🔧 Serviços

### EntityService<T>

Serviço base genérico para operações CRUD.

#### Métodos

```typescript
list(params?: ListParams): Observable<EntityListResponse<T>>
```
Lista entidades com paginação e filtros.

**Parâmetros:**
- `params.page`: Número da página (padrão: 0)
- `params.size`: Tamanho da página (padrão: 10)
- `params.sort`: Ordenação (ex: 'name,asc')
- `params.filter`: Filtros (objeto chave-valor)

**Retorno:**
```typescript
{
  content: T[],
  totalElements: number,
  totalPages: number,
  size: number,
  number: number
}
```

```typescript
getById(id: number | string): Observable<T>
```
Busca entidade por ID.

```typescript
insert(entity: Partial<T>): Observable<T>
```
Cria nova entidade.

```typescript
update(id: number | string, entity: Partial<T>): Observable<T>
```
Atualiza entidade existente.

```typescript
delete(id: number | string): Observable<void>
```
Exclui entidade.

```typescript
bulkDelete(ids: (number | string)[]): Observable<void>
```
Exclui múltiplas entidades.

---

### TranslationService

Serviço de internacionalização.

#### Métodos

```typescript
translate(key: string, params?: any): string
```
Traduz uma chave.

```typescript
setLanguage(language: SupportedLanguage): void
```
Define o idioma atual.

```typescript
getCurrentLanguage(): SupportedLanguage
```
Retorna o idioma atual.

```typescript
onLanguageChange(): Observable<SupportedLanguage>
```
Observable de mudanças de idioma.

---

### ThemeService

Serviço de gerenciamento de temas.

#### Métodos

```typescript
setTheme(theme: 'light' | 'dark'): void
```
Define o tema.

```typescript
getCurrentTheme(): 'light' | 'dark'
```
Retorna o tema atual.

```typescript
toggleTheme(): void
```
Alterna entre light e dark.

```typescript
onThemeChange(): Observable<'light' | 'dark'>
```
Observable de mudanças de tema.

---

### AuthService

Serviço de autenticação.

#### Métodos

```typescript
login(credentials: { username: string; password: string }): Observable<UserToken>
```
Realiza login.

```typescript
logout(): void
```
Realiza logout.

```typescript
getToken(): string | null
```
Retorna o token atual.

```typescript
isAuthenticated(): boolean
```
Verifica se está autenticado.

```typescript
getCurrentUser(): UserToken | null
```
Retorna o usuário atual.

---

### PermissionService

Serviço de controle de permissões.

#### Métodos

```typescript
hasPermission(permission: string): Observable<boolean>
```
Verifica se tem permissão.

```typescript
checkAccess(resource: string, action: string): Observable<boolean>
```
Verifica acesso a recurso.

---

## 📦 Interfaces e Types

### DynamicFormFieldConfig

```typescript
interface DynamicFormFieldConfig {
  name: string;
  label: string;
  type: FieldType;
  value?: any;
  required?: boolean;
  disabled?: boolean;
  placeholder?: string;
  options?: SelectOption[];
  rows?: number;
  mask?: string;
  validators?: ValidatorFn[];
  lookupConfig?: LookupConfig;
  dateFormat?: string;
  showTime?: boolean;
  minDate?: Date;
  maxDate?: Date;
  accept?: string;
  multiple?: boolean;
  min?: number;
  max?: number;
  step?: number;
  cols?: number;
}
```

### DynamicFormSection

```typescript
interface DynamicFormSection {
  title: string;
  fields: DynamicFormFieldConfig[];
  collapsible?: boolean;
  collapsed?: boolean;
}
```

### FieldType

```typescript
enum FieldType {
  TEXT = 'text',
  TEXTAREA = 'textarea',
  NUMBER = 'number',
  EMAIL = 'email',
  PASSWORD = 'password',
  DATE = 'date',
  DATETIME = 'datetime',
  SELECT = 'select',
  MULTISELECT = 'multiselect',
  CHECKBOX = 'checkbox',
  RADIO = 'radio',
  SWITCH = 'switch',
  LOOKUP = 'lookup',
  FILE = 'file',
  HIDDEN = 'hidden'
}
```

### SelectOption

```typescript
interface SelectOption {
  label: string;
  value: any;
  disabled?: boolean;
}
```

### LookupConfig

```typescript
interface LookupConfig {
  service: EntityService<any>;
  displayField: string;
  valueField: string;
  searchFields: string[];
  columns: ColumnOption[];
  pageSize?: number;
}
```

### ColumnOption

```typescript
interface ColumnOption {
  field: string;
  header: string;
  selected?: boolean;
}
```

### EntityListResponse<T>

```typescript
interface EntityListResponse<T> {
  content: T[];
  totalElements: number;
  totalPages: number;
  size: number;
  number: number;
}
```

### ListParams

```typescript
interface ListParams {
  page?: number;
  size?: number;
  sort?: string;
  filter?: Record<string, any>;
}
```

### UserToken

```typescript
interface UserToken {
  access_token: string;
  token_type: string;
  expires_in: number;
  refresh_token?: string;
  user?: {
    id: number;
    username: string;
    email: string;
    name: string;
  };
}
```

### BaseEntity

```typescript
interface BaseEntity {
  id?: number;
  createdAt?: Date;
  updatedAt?: Date;
  active?: boolean;
}
```

---

## 🎨 Diretivas

### CepMaskDirective

Aplica máscara de CEP (00000-000).

```typescript
<input type="text" pInputText cepMask />
```

### DocumentMaskDirective

Aplica máscara de CPF/CNPJ automaticamente.

```typescript
<input type="text" pInputText documentMask />
```

### PhoneMaskDirective

Aplica máscara de telefone (00) 00000-0000.

```typescript
<input type="text" pInputText phoneMask />
```

---

## 🔄 Pipes

### TranslatePipe

Pipe de tradução.

```typescript
{{ 'key.translation' | translate }}
{{ 'key.with.params' | translate:{ name: 'João' } }}
```

---

## 🔗 Veja Também

- [Documentação de Componentes](./COMPONENTS.md)
- [Exemplos Práticos](./EXAMPLES.md)
- [Guia de Migração](./MIGRATION.md)
