import { PoChartType } from '../enums/po-chart-type.enum';
/**
* @usedBy PoChartComponent
*
* @description
*
* Interface das series dinâmicas do `po-chart` que possibilita desenhar gráficos dos tipos `area`, `bar`, `column`, `line`, `donut`, `pie` e `radar`
*/
export interface PoChartSerie {
/**
* @description
*
* Determina a cor da série. As maneiras de customizar o *preset* padrão de cores são:
* * Hexadecimal, por exemplo `#c64840`;
* * RGB, por exemplo `rgb(0, 0, 165)`
* * O nome da cor, por exemplo `blue`;
* * Variáveis CSS, por exemplo `var(--color-01)`;
* * Usando uma das cores do tema do PO:
* Valores válidos:
* - `color-01`
* - `color-02`
* - `color-03`
* - `color-04`
* - `color-05`
* - `color-06`
* - `color-07`
* - `color-08`
* - `color-09`
* - `color-10`
* - `color-11`
* - `color-12`
* - A partir da 13° série o valor da cor será preta caso não seja enviada uma cor customizada.
*/
color?: string;
/**
* @optional
*
* @description
*
* Define a lista de valores para a série. Os tipos esperados são de acordo com o tipo de gráfico:
* - Para gráficos dos tipos `donut` e `pie`, espera-se *number*;
* - Para gráficos dos tipos `area`, `bar`, `column`, `line` e `radar`, espera-se um *array* de `data`.
*
* > Se passado valor `null` em determinado item da lista, a iteração irá ignorá-lo.
*/
data?: number | Array;
/**
* @optional
*
* @description
*
* Define se a série terá sua área preenchida.
*
* > Propriedade válida para gráficos do tipo `Radar`, `fillpoints` não funciona quando `areaStyle` está definido como `true`.
*/
areaStyle?: boolean;
/** Rótulo referência da série. */
label?: string;
/**
* @optional
*
* @description
*
* Define o texto que será exibido na tooltip ao passar o mouse por cima das séries do *chart*.
*
* Formatos aceitos:
*
* - **string**: pode conter marcadores dinâmicos e HTML simples.
* - Marcadores disponíveis:
* - `{name}` → Nome do item/categoria.
* - `{seriesName}` → Nome da série.
* - `{value}` → Valor correspondente.
*
* - **function**: função que recebe o objeto `params` e deve retornar uma *string* com o conteúdo da tooltip.
*
* > É possível utilizar marcação HTML simples (``, ``, `
`, `
`, etc.) que será interpretada via `innerHTML`.
*
* > Formatação customizada (será convertido internamente para HTML):
* - `\n` → quebra de linha (`
`).
* - `**texto**` → negrito (``).
* - `__texto__` → itálico (``).
*
* > Caso não seja informado um valor para o *tooltip*, será exibido da seguinte forma:
* - `donut`, `label`: valor proporcional ao total em porcentagem.
* - `radar`: nome da série, o nome do indicator e os valores correspondentes.
* - `area`, `bar`, `column`, `line` e `pie`: `label`: `data`.
*
* ### Exemplos:
*
* **Usando string com placeholders:**
* ```ts
* tooltip: 'Ano: {name}
Série: {seriesName}
Valor: {value}'
* ```
*
* **Usando função de callback:**
* ```ts
* tooltip = (params) => {
* return `Ano: ${params.name}
Valor: ${params.value}`;
* }
* ```
*/
tooltip?: string | ((params: any) => string);
/**
* @optional
*
* @description
*
* Define em qual tipo de gráfico que será exibida a série. É possível combinar séries dos tipos `column` e `line` no mesmo gráfico. Para isso, basta criar as séries com as configurações:
* - Serie A: `{ type: ChartType.Column, data: ... }`;
* - Série B: `{ type: ChartType.Line, data: ... }`.
*
* Se tanto `p-type` quanto `{ type }` forem ignorados, o padrão gerado pelo componente será:
* - `column`: se `data` receber `Array`;
* - `pie`: se `data` for *number*.
*
* > Se utilizada a propriedade `p-type`, dispensa-se a definição desta propriedade. Porém, se houver declaração para ambas, o valor `{type}` da primeira série sobrescreverá o valor definido em `p-type`.
*
* > O componente só exibirá as séries que tiverem o mesmo `type` definido, exceto para mesclagem para tipos `column` e `line`.
*/
type?: PoChartType;
/**
* Alcance inicial da cor.
*
* > Propriedade válida para gráfico do tipo `Gauge`.
*/
from?: number;
/**
* Alcance final da cor.
*
* > Propriedade válida para gráfico do tipo `Gauge`.
*/
to?: number;
/**
* @optional
*
* @description
*
* Agrupa as séries em barras ou colunas que receberem o mesmo `stackGroupName`. Exemplo:
* - Serie A: `{ data: 500, stackGroupName: 'group1' ... }`;
* - Série B: `{ data: 200, stackGroupName: 'group1' ... }`.
* - Série C: `{ data: 100, stackGroupName: 'group2' ... }`.
* - Série D: `{ data: 400, stackGroupName: 'group2' ... }`.
*
* Nesse caso será criado duas barras ou colunas com duas series agrupadas em cada uma por categoria.
* > Válido para gráfico do tipo `Column` e `Bar`. Essa propriedade é ignorada caso a propriedade `stacked` da interface `PoChartOptions` esteja como `true`.
*
* > Essa propriedade habilita a propriedade `p-data-label` por padrão, podendo ser desabilitada passando `[p-data-label]={ fixed: false }`.
*/
stackGroupName?: string;
}