import { PriorityInterface, StationPlanesFamilies } from "../components/system-admin/system-params/system-params.component";

export interface FamiliesListResponse{
  error: boolean;
  msg: string;
  response: FamiliesListItem[];
}

export interface FamiliesListItem{
  CODIGOFAMILIA: string;
  NOMBREFAMILIA: string;
  COLORFAMILIA: string;
  ICONO: string;
  ICONO_PERSONALIZADO: string;
  ARCHIVO_ICONO: string | null;
  URL_ICONO?: string;
  ESTADO: string;
  USRREG: string;
  FECREG: string;
  USRMOD: string | null;
  FECMOD: string | null;
  SUBFAMILIAS: number;
}

export interface FamilyDetailsResponse{
  error: boolean;
  msg: string;
  response: FamilyDetails;
}

export interface FamilyDetails{
  CODIGO_FAMILIA: string;
  NOMBRE_FAMILIA: string;
  COLOR_FAMILIA: string;
  ICONO: string;
  ICONO_PERSONALIZADO: string;
  ARCHIVO_ICONO: string | null;
  ESTADO: string;
  USRREG: string;
  FECREG: string;
  USRMOD: string | null;
  FECMOD: string | null;
}

export interface SubfamiliesListResponse{
  error: boolean;
  msg: string;
  response: SubfamiliesListItem[];
}

export interface SubfamiliesListItem{
  CODIGOFAMILIA: string;
  CODIGOSUBFAMILIA: string;
  NOMBRESUBFAMILIA: string;
  ICONO: string;
  ICONO_PERSONALIZADO: string;
  ARCHIVO_ICONO: string | null;
  URL_ICONO?: string;
  ESTADO: string;
  USRREG: string;
  FECREG: string;
  USRMOD: string | null;
  FECMOD: string | null;
  TIENE_HIJOS: boolean;
} 

export interface LocationsListResponse{
  error: boolean;
  msg: string;
  response: LocationsListItem[];
}

export interface LocationsListItem{
  LOCATION: string;
  CODE: string;
}

export interface OccupationAreasListResponse{
  error: boolean;
  msg: string;
  response: OccupationAreasListItem[];
}

export interface OccupationAreasListItem{
  CODE: string;
  AREA: string;
}

export interface OccupationsListResponse{
  error: boolean;
  msg: string;
  response: OccupationsListItem[];
}

export interface OccupationsListItem{
  NOMBREAREA: string;
  OCUPACION: string;
  DESCRIPCION: string;
  ESTADO: string;
  USRREG: string;
  FECREG: string;
  USRMOD: string | null;
  FECMOD: string | null;
}

export interface PendingEquipmentsListResponse{
  error: boolean;
  msg: string;
  response: PendingEquipmentsListItem[];
}

export interface PendingEquipmentsListItem{
  IDREG?: string;
  CODIGO: string;
  TIPO_CODIGO: string;
  TIPO_EQUIPAMIENTO: string;
  MODELO_EQUIPAMIENTO: string;
  GALERIA_IMAGENES: string | Array<string>; 
  ESTADO_REGISTRO: string;
  TOTAL?: number;
}

export interface PendingEquipmentResponse{
  error: boolean;
  msg: string;
  response: PendingEquipmentDetails;
}

export interface PendingEquipmentDetails{
  IDREG: string;
  CODIGO: string;
  JERARQUIA: string;
  PADRE: string | null;
  TIPO_CODIGO: string;
  UBICACION_ORIGEN: string;
  NIVEL_ORIGEN: string;
  OCUPACION_ORIGEN: string;
  ELEMENTO_ORIGEN: string;
  FAMILIA: string;
  SUBFAMILIA: string;
  ESTADO_EQUIPAMIENTO: string;
  TIPO_EQUIPAMIENTO: string;
  MODELO_EQUIPAMIENTO: string;
  INTERSECCION_PCC: string | null;
  POSICION_PCC: string | null;
  KILOMETRO_ORIGEN: number | null;
  UBICACION_DESTINO: string | null;
  NIVEL_DESTINO: string | null;
  OCUPACION_DESTINO: string | null;
  ELEMENTO_DESTINO: string | null;
  KILOMETRO_DESTINO: number | null;
  FECHA_ADQUISICION: string;
  FECHA_INICIO_GARANTIA: string;
  FECHA_FIN_GARANTIA: string;
  PROVEEDOR: string | number;
  DENOMINACION_SOFTWARE: string | null;
  VERSION_SOFTWARE: string | null;
  GALERIA_IMAGENES: string;
  DOCUMENTOS: string;
  ESTADO_REGISTRO: string;
  COMENTARIOS_RECHAZO: string | null;
  COMENTARIOS_ACEPTACION: string | null;
  USUARIO_REGISTRO: string;
  FECHA_REGISTRO: string;
  USUARIO_MODIFICO: string | null;
  FECHA_MODIFICACION: string | null;
}

export interface EquipmentsListResponse{
  error: boolean;
  msg: string;
  response: EquipmentsListItem[];
}

export interface EquipmentsListItem{
  CODIGO: string;
  TIPO: string;
  MODELO: string;
  ID_EQUIPO: string;
  ESTADO_FUNCIONAMIENTO: string;
  GALERIA_IMAGENES?: string | string[];
  ELEMENTO_ORIGEN: string;
  TIPO_CODIGO: string;
  EQUIPO_PADRE: string | null;
  KILOMETRO_ORIGEN?: number;
  KILOMETRO_DESTINO?: number;
  NIVEL_ORIGEN?: string;
  NIVEL_DESTINO?: string;
  TIENE_HIJOS: string;
}

export interface EquipmentDetailsResponse{
  error: boolean;
  msg: string;
  response: EquipmentDetails;
}

export interface EquipmentDetails{
  FAMILIA: string;
  SUBFAMILIA: string;
  TIPO_EQUIPAMIENTO: string;
  MODELO: string;
  ID_EQUIPAMIENTO: string;
  ESTADO: string;
  CODIGO: string;
  JERARQUIA: string;
  EQUIPO_PADRE: string | null;
  TIPO_CODIGO: string;
  UBICACION_ORIGEN: string;
  NIVEL_ORIGEN: string;
  OCUPACION_ORIGEN: string;
  ELEMENTO_ORIGEN: string;
  INTERSECCION_PCC: string | null;
  POSICION_PCC: string | null;
  KILOMETRO_ORIGEN: number | null;
  SECUENCIA_ELEMENTO_ORIGEN: string | null;
  AREA_TREN: string | null;
  TIPO_CODIFICACION_ORIGEN: string | null;
  CODIGO_ELEMENTO_ORIGEN: string | null;
  UBICACION_DESTINO: string | null;
  NIVEL_DESTINO: string | null;
  OCUPACION_DESTINO: string | null;
  ELEMENTO_DESTINO: string | null;
  KILOMETRO_DESTINO: number | null;
  SECUENCIA_ELEMENTO_DESTINO: string | null;
  TIPO_CODIFICACION_DESTINO: string | null;
  CODIGO_ELEMENTO_DESTINO: string | null;
  NIVEL_CRITICIDAD: string | null;
  NIVEL_CRITICIDAD_OBJ: PriorityInterface;
  FECHA_ADQUISICION: string;
  FECHA_INICIO_GARANTIA: string;
  FECHA_TERMINO_GARANTIA: string;
  PROVEEDOR: string;
  DENOMINACION_SOFTWARE: string | null;
  VERSION_SOFTWARE: string | null;
  HISTORIAL_CODIGOS: string;
  HISTORIAL_CODIGOS_ARR?: HistorialCodigos[];
  GALERIA_IMAGENES: string | string[];
  DOCUMENTOS: string | any[];
  ESTADO_FUNCIONAMIENTO: string;
  USUARIO_REGISTRO: string;
  FECHA_REGISTRO: string;
  USUARIO_MODIFICACION: string | null;
  FECHA_MODIFICACION: string | null;
}

export interface HistorialCodigos{
  PADRE: string | null;
  CODIGO: string;
}

export interface TrainOccupationsListResponse{
  error: boolean;
  msg: string;
  response: TrainOccupationsListItem[];
}

export interface TrainOccupationsListItem{
  CAR: string;
  CODE: string;
  IMAGE?: string;
}

export interface CarAreasListResponse{
  error: boolean;
  msg: string;
  response: CarAreasListItem[];
}

export interface CarAreasListItem{
  CODE: string;
  AREA: string;
  IMAGE?: string;
}

export interface TrainElementsListResponse{
  error: boolean;
  msg: string;
  response: TrainElementsListItem[];
}

export interface TrainElementsListItem{
  CODE: string;
  ELEMENT: string;
}

export interface EquipmentTypesListResponse{
  error: boolean;
  msg: string;
  response: EquipmentTypesListItem[];
}

export interface EquipmentTypesListItem{
  CANTIDAD_EQUIPAMIENTOS: number;
  TIPO_EQUIPAMIENTO: string;
}

export interface ArborescenceCalendarListResponse{
  error: boolean;
  msg: string;
  response: ArborescenceCalendarListItem[];
}

export interface ArborescenceCalendarListItem{
  ELEMENTO: string;
  HIJOS: ArborescenceCalendarListItem[];
}

export interface PCCEquipmentsListResponse{
  error: boolean;
  msg: string;
  response: StationPlanesFamilies[];
}