
export interface ResponseDataGetForms {
  error: boolean;
  msg: string;
  response: GetForms[];
}

export interface GetForms {
  CODIGO_FORMULARIO: string;
  TITULO_REGISTRO: string;
  TITULO_MODIFICACION: string;
  MODULO: string;
  ESTADO: string;
  WORKFLOW: string;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

export interface ComponentInformationInput {
  COLUMNA: string;
  ETIQUETA: string;
  IDENTIFICADOR: string;
  TIPO_CAMPO: string;
  NOMBRE_CAMPO: string;
  PLACEHOLDER: string;
  LONGITUD_CAMPO_MINIMO: number | null;
  LONGITUD_CAMPO_MAXIMO: number | null;
  ICONO: string | null;
  VALOR_DEFECTO: string | null;
  PATRON_VALIDACION: string | null;
  MENSAJE_ERROR_VALIDACION: string | null;
  PERMISOS: string[];
  DESHABILITAR: string[] | null;
  REQUERIDO: string[] | null;
  SOLO_LECTURA: string[] | null;
  TAMANO_COLUMNA: number;
}

export interface DataFormComponents {
  TYPE_COMPONENT: 'INPUT'|'SELECT'|'CHECKBOX'|'RADIO'|'TEXTAREA';
  COMPONENT: ComponentInformationInput | ComponentInformationSelect | ComponentInformationTextarea | ComponentInformationCheckbox | ComponentInformationRadio;
}

export interface DataDialogComponentInput {
  COLUMNS: string[]; 
  IDS: string[]; 
  TYPE_FORM: 'R' | 'M';
  ENABLED: boolean;
  COMPONENTS?: ComponentInformationInput;
}
export interface DataDialogComponentSelect {
  COLUMNS: string[]; 
  IDS: string[]; 
  TYPE_FORM: 'R' | 'M';
  ENABLED: boolean;
  COMPONENTS?: ComponentInformationSelect;
}
export interface DataDialogComponentTextarea {
  COLUMNS: string[]; 
  IDS: string[]; 
  TYPE_FORM: 'R' | 'M';
  ENABLED: boolean;
  COMPONENTS?: ComponentInformationTextarea;
}
export interface DataDialogComponentCheckbox {
  COLUMNS: string[]; 
  IDS: string[]; 
  TYPE_FORM: 'R' | 'M';
  ENABLED: boolean;
  COMPONENTS?: ComponentInformationCheckbox;
}
export interface DataDialogComponentRadio {
  COLUMNS: string[]; 
  IDS: string[]; 
  TYPE_FORM: 'R' | 'M';
  ENABLED: boolean;
  COMPONENTS?: ComponentInformationRadio;
}

export interface FormDataPersonality {
  VALOR_CAMPO: string;
  NOMBRE_CAMPO: string;
}

export interface TypeFormDataPersonality {
  TYPE_FORM: 'R' | 'M';
  INDEX?: number;
}

export interface ResponseDataGetInformationDataSelect {
  error: boolean;
  msg: string;
  response: GetInformationDataSelect[];
}

export interface GetInformationDataSelect {
  VALOR_CAMPO: string;
  NOMBRE_CAMPO: string;
  ESTADO_CAMPO: 'Activo' | 'Inactivo';
}

export interface ComponentInformationSelect {
  COLUMNA: string;
  ETIQUETA: string;
  IDENTIFICADOR: string;
  TIPO_SELECT: 'NORMAL' | 'MULTIPLE';
  ICONO: string | null;
  VALOR_DEFECTO: string | null;
  DESHABILITAR: string[] | null;
  REQUERIDO: string[] | null;
  PERMISOS: string[];
  TIPO_INFORMACION: 'CONSULTA_TABLA' | 'DATOS_PERSONALIZADOS';
  TAMANO_COLUMNA: number;
  OBTENER_DATOS_TABLA?: GetDataTable;
  VALORES_INUTILIZABLES?: string[];
  DATOS_PERSONALIZABLES?: FormDataPersonality[];
}

export interface GetDataTable {
  TABLA: string;
  COLUMNA_VALOR: string;
  COLUMNA_NOMBRE: string;
}

export interface ComponentInformationTextarea {
  COLUMNA: string;
  ETIQUETA: string;
  IDENTIFICADOR: string;
  NOMBRE_CAMPO: string;
  PLACEHOLDER: string;
  LONGITUD_CAMPO_MINIMO: number | null;
  LONGITUD_CAMPO_MAXIMO: number | null;
  ICONO: string | null;
  FILAS: number;
  VALOR_DEFECTO: string | null;
  PATRON_VALIDACION: string | null;
  MENSAJE_ERROR_VALIDACION: string | null;
  PERMISOS: string[];
  DESHABILITAR: string[] | null;
  REQUERIDO: string[] | null;
  SOLO_LECTURA: string[] | null;
  TAMANO_COLUMNA: number;
}

export interface ComponentInformationCheckbox {
  COLUMNA: string;
  ETIQUETA: string;
  IDENTIFICADOR: string;
  NOMBRE_CAMPO: string | null;
  VALOR_DEFECTO: boolean;
  PERMISOS: string[];
  DESHABILITAR: string[] | null;
  TAMANO_COLUMNA: number;
}

export interface ComponentInformationRadio {
  COLUMNA: string;
  ETIQUETA: string;
  IDENTIFICADOR: string;
  NOMBRE_CAMPO: string;
  REQUERIDO: string[] | null;
  DESHABILITAR: string[] | null;
  PERMISOS: string[];
  TAMANO_COLUMNA: number;
  DATOS_VALORES: FormDataPersonality[];
}

export interface DataDynamicForm {
  TYPE_FORM: 'R' | 'M';
  TYPE_DIALOG: 'GENERATE' | 'EXAMPLE';
  ID_FORM?: string;
  INFO_FORM?: InformationDynamicForm;
  DEFAULT_VALUE: DefaultValue[];
}

export interface DefaultValue {
  COLUMN: string;
  TYPE: string;
  VALUE: string;
}

export interface InformationDynamicForm {
  TITLE: string;
  COMPONENTS: DataFormComponents[];
}


export interface FormColumnsData {
  TABLES_SELECTED: string[];
  COLUMNS_GENERAL: GetTables[];
  INFO_PERSONALITY: GetTableColumns[];
}


export interface GetTableColumns {
  TABLA: string;
  COLUMNS: FormColumns[];
}

export interface FormColumns {
  COLUMN: string;
  DESCRIPTION: string;
}

export interface DataTypeForm {
  TYPE_FORM: 'R' | 'M';
  INDEX_TABLE?: number;
  INDEX_COLUMN?: number;
}


export interface InformationValidate {
  TABLA: string;
  COLUMNAS: string[];
}

export interface InformationDatabase {
  TABLA: string[];
  COLUMNAS: string[];
}

export interface DataDialogValidateForm {
  TABLES: string[];
  COLUMNS: string[];
}

export interface ResponseDataGetFormById {
  error: boolean;
  msg: string;
  response: GetFormById;
}
export interface GetFormById {
  NUMERO_FORMULARIO: string;
  ID_MODULO: string;
  TITULO_REGISTRO: string;
  TITULO_MODIFICACION: string;
  DATOS_FORMULARIO: GetDataForm;
  ESTADO: string;
}

export interface GetDataForm {
  DATA_BASE: InformationDatabase;
  COMPONENTS: DataFormComponents[];
  INFO_VALIDATE: InformationValidate[];
  PERSONALITY_COLUMNS: GetTableColumns[];
}

export interface RequestForm {
  MODULO: string;
  REGISTRO_FORMULARIO: string;
  MODIFICA_FORMULARIO: string;
  TABLA: string;
  COLUMNAS: string[];
  DATA_FORM: DataFormComponents[];
  INFO_VALIDATE: InformationValidate[];
  PERSONALITY_COLUMNS: GetTableColumns[];
  NUMERO_LINEA: number;
  USUARIO: string;
}

export interface RequestDynamicForm {
  IDFORM: string;
  DATAFORM: any;
  USUARIO: string;
  NUMERO_LINEA: number;
  WHERE?: DefaultValue[];
}

export interface RequestDataForm {
  VALUES: DefaultValue[];
}

export interface ResponseDataGetTables {
  error: boolean;
  msg: string;
  response: GetTables[];
}

export interface GetTables {
  CODIGO_TABLA: string;
  NOMBRE_TABLA: string;
  COLUMNS: DataColumnTable[];
  FECHA_MODIFICA: string;
  USUARIO_MODIFICA: string;
  ESTADO: string;
  DISABLED: boolean;
}

export interface DataColumnTable {
  COLUMN: string;
  TYPE_COLUMN: string;
  COMMENTS: string;
  NULLABLE: 'YES'|'NO';
}