export interface ResponseDataGetWorkflows {
  error: boolean;
  msg: string;
  response: Array<GetWorkflows>;
}

export interface GetWorkflows {
  ID_WORKFLOW: number;
  NOMBRE_WORKFLOW: string;
  DESCRIPCION: string;
  MODULOS: string;
  PREDETERMINADO: boolean;
  VERSION: string;
  ESTADO: string;
}

export interface Workflow {
  ID_WORKFLOW: number;
  NUMERO_LINEA: number;
  NOMBRE_WORKFLOW: string;
  DESCRIPCION: string;
  PREDETERMINADO: boolean;
  ESTADO: string;
  VERSION: number;
  MODULOS: string;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

//Este es el que usamos cuando se actualiza
export interface RequestFormWorkflow {
  NOMBRE_WORKFLOW: string;
  DESCRIPCION: string;
  COMENTARIO_CAMBIO: string;
  USUARIO: string;
  NUMERO_LINEA: number;
}

export interface RegisterWorkflowRequest {
  NOMBRE_WORKFLOW: string;
  DESCRIPCION: string;
  USUARIO: string;
  NUMERO_LINEA: number;
}

export interface DetailsFormWorkflow {
  type: 'REG' | 'UPD';
  idWorkflow?: string;
}

export interface ResponseDataWorkflow {
  error: boolean;
  msg: string;
  response: Workflow;
}

export interface ResponseDataGetTasks {
  error: boolean;
  msg: string;
  response: Array<GetTask>;
}

export interface GetTask {
  ID_TAREA: number;
  NOMBRE_TAREA: string;
  DESCRIPCION: string;
  SECUENCIA: number;
  ESTADO: string;
  REGLA_VALIDACION: string;
  REQUIERE_VALIDACION: boolean;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

export interface DetailsFormTask {
  type: 'REG' | 'UPD';
  idTask?: string;
  idWorkflow?: string;
}

export interface ResponseDataTask {
  error: boolean;
  msg: string;
  response: Task;
}

export interface Task {
  ID_TAREA: number;
  NUMERO_LINEA: number;
  ID_WORKFLOW: number;
  NOMBRE_TAREA: string;
  DESCRIPCION: string;
  SECUENCIA: number;
  REQUIERE_VALIDACION: number;
  USUARIOS_NOTIFICAR: string;
  USUARIO_VALIDADOR: string;
  REGLAS_VALIDACION: string;
  ID_FUNCION: string;
  ID_MODULO: string;
  ESTADO: string;
  INFORMACION_EXTRA: string | null;
  USUARIO_REGISTRO: string;
  FECHA_REGISTRO: string;
  USUARIO_MODIFICA: string | null;
  FECHA_MODIFICA: string | null;
  FECHA_ACTUALIZACION: string;
}

export interface ResponseDataGetExecuteWorkflow {
  error: boolean;
  msg: string;
  response: Array<GetExecuteWorkflow>;
}

export interface GetExecuteWorkflow {
  ID_EJECUCION_WORKFLOW: number;
  ID_WORKFLOW: number;
  NOMBRE_WORKFLOW: string;
  PROGRESO: number;
  AUTOMATICO: string;
  ESTADO: string;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

export interface ResponseDataProcessWorkflow {
  error: boolean;
  msg: string;
  response: Array<ProcessWorkflow>;
}

export interface ProcessWorkflow {
  ID_PROCESO: number;
  ID_MODULO: string;
  NOMBRE_PROCESO: string;
  ESTADO: string;
}

export interface RequestFormTask {
  ID_WORKFLOW: string;
  NOMBRE_TAREA: string;
  DESCRIPCION: string;
  SECUENCIA: number;
  REQUIERE_VALIDACION: boolean;
  ID_MODULO: string;
  ID_SUBMODULO: string;
  ID_FUNCION: string;
  REGLAS_VALIDACION: string;
  ID_WORKFLOW_EJECUTAR: string;
  USUARIO_VALIDACION: string;
  NOTIFICAR_USUARIOS: Array<string>;
  USUARIO: string;
  NUMERO_LINEA: number;
}

export interface ResponseDataGetExecuteTask {
  error: boolean;
  msg: string;
  response: Array<GetExecuteTask>;
}

export interface GetExecuteTask {
  ID_EJECUCION_WORKFLOW: number;
  ID_EJECUCION_TAREA: number;
  NOMBRE_TAREA: string;
  USUARIO_RESPONSABLE: string;
  NOMBRE_PROCESO: string;
  PROGRESO: number;
  NOMBRE_WORKFLOW: string;
  INFORMACION_FORMULARIO: string;
  INFORMACION_REGISTRO: string;
  ESTADO: string;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

export interface RequestFormRequestWorkflow {
  ESTADO: 'Aceptado' | 'Rechazado';
  MENSAJE_RECHAZO: string | null;
  USUARIO: string;
  NUMERO_LINEA: number;
}

export interface FormRequestTaskRequest {
  ID: number;
  TYPE: 'VALIDATE' | 'NOTIFICATE';
}

export interface ResponseDataGetHistoryNotificateTask {
  error: boolean;
  msg: string;
  response: Array<GetHistoryNotificateTask>;
}
export interface GetHistoryNotificateTask {
  ID_EJECUCION_NOTIFICACION: number;
  USUARIO_RESPONSABLE: string;
  TIPO_NOTIFICACION: string;
  ESTADO: string;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

export interface ResponseDataGetTaskByWorkflow {
  error: boolean;
  msg: string;
  response: GetTaskByWorkflow[];
}

export interface GetTaskByWorkflow {
  ID_TAREA: number;
  NOMBRE_TAREA: string;
  DESCRIPCION: string;
  SECUENCIA: number;
  REQUIERE_VALIDACION: number;
  REGLA_VALIDACION: string;
  ESTADO: string;
}

export interface RequestSearch {
  WORKFLOW: number;
  EJECUCION_WORKFLOW: number;
  ESTADO_WORKFLOW: string;
  TAREA: number;
  EJECUCION_TAREA: number;
  ESTADO_TAREA: string;
  PROCESO: number;
  FECHA_INICIO: string;
  FECHA_FINAL: string;
  USUARIO: string;
  NUMERO_LINEA: number;
}

export interface ResponseDataFilterRequest {
  error: boolean;
  msg: string;
  response: FilterRequest[];
}

export interface FilterRequest {
  NOMBRE_WORKFLOW: string;
  ID_EJECUCION_WORKFLOW: number;
  ESTADO_EJECUCION_WORKFLOW: string;
  NOMBRE_TAREA: string;
  ID_EJECUCION_TAREA: number;
  ESTADO_EJECUCION_TAREA: string;
  NOMBRE_PROCESO: string;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

export interface ResponseDataDetailsRequest {
  error: boolean;
  msg: string;
  response: DetailsRequest;
}

export interface DetailsRequest {
  NOMBRE_WORKFLOW: string;
  DESCRIPCION_WORKFLOW: string;
  AUTOMATICO: string;
  PREDETERMINADO: string;
  ID_EJECUCION_WORKFLOW: string;
  ESTADO_EJECUCION_WORKFLOW: string;
  NOMBRE_TAREA: string;
  DESCRIPCION_TAREA: string;
  ID_EJECUCION_TAREA: string;
  INFORMACION_FORMULARIO: string;
  INFORMACION_REGISTRO: string;
  ESTADO_EJECUCION_TAREA: string;
  NOMBRE_PROCESO: string;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

export interface RequestNotificate {
  NUMERO_NOTIFICACION: number;
  USUARIO_NOTIFICACION: string;
  TIPO_NOTIFICACION: string;
  ESTADO_NOTIFICACION: string;
  FECHA_INICIO: string;
  FECHA_FINAL: string;
  USUARIO: string;
  NUMERO_LINEA: number;
}

export interface ResponseDataFilterNotificate {
  error: boolean;
  msg: string;
  response: FilterNotificate[];
}

export interface FilterNotificate {
  ID_NOTIFICACION: string;
  ID_EJECUCION_TAREA: string;
  USUARIO_NOTIFICACION: string;
  TIPO_NOTIFICACION: string;
  ESTADO: string;
  MENSAJE_RECHAZO: string;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

export interface ResponseDataDetailsNotificate {
  error: boolean;
  msg: string;
  response: DetailsNotificate;
}

export interface DetailsNotificate {
  NUMERO_NOTIFICACION: string;
  ID_EJECUCION_TAREA: string;
  USUARIO_NOTIFICACION: string;
  SECUENCIA: string;
  TIPO_NOTIFICACION: string;
  ESTADO: string;
  MENSAJE_RECHAZO: string;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

export interface ChangeWorkflowStatusRequest {
  ID_WORKFLOW: number;
  ESTADO: string;
  COMENTARIO_CAMBIO: string;
  USUARIO: string;
  NUMERO_LINEA: number;
}

export interface ResponseDataActiveWorkflows {
  error: boolean;
  msg: string;
  response: Array<ActiveWorkflow>;
}

export interface ActiveWorkflow {
  ID_WORKFLOW: number;
  NOMBRE_WORKFLOW: string;
}
