import { SliderData } from "../slider.interface";
import { FileSelected, InfoUpload, TempFiles } from "../upload-files.interface";
import { InformationsData } from "./provider.interface";

export interface ArtitleResponse{
  ID_DESC_ARTI: string;
  ID_ARTICULO:number;
  CODIGO:string;
  MODELO:string;
  ID_FAMILIA:string;
  FAMILIA:string;
  ID_SUBFAMILIA:string;
  SUBFAMILIA:string;
  DESCRIPCION:string;
  CARACTERISTICAS:string;
  CANTIDAD: number;
  COMPRA_WEB: string;
  INFO_PRODUCTO: string;
  ID_UNIDAD: string;
  UNIDAD: string;
  URL_IMAGEN: Array<string>;
  IMAGEN: Array<InfoUpload>;
  ID_PROVEEDOR: string;
  PROVEEDOR: string;
}

export interface DialogModule {
  DATA: DataTableResponse;
  TITLE: string;
  ACTIONS: string;
}

export interface ResponseDataFamilies {
  error: boolean;
  msg: string;
  response: Array<DataFamilies>;
}

export interface ResponseDataArtitle {
  error: boolean;
  msg: string;
  response: Array<ArtitleResponse>;
}


export interface ResponseDataById {
  error: boolean;
  msg: string;
  response: ArtitleResponse;
}



export interface ResponseInformation {
  ID_DESCRIPCION: string;
  DESCRIPCION: string;
  CARACTERISTICAS: string;
  COMPRA_WEB: boolean;
  TIPO_UNIDAD: number;
  IMAGEN: Array<string>;
  PROVEEDOR: InformationsData;
  ESTADO: string;
  DETALLES: Array<ResponseDetails>;
}

export interface ResponseDetails {
  NUMERO_DETALLE: string;
  CODIGO: string;
  MODELO: string;
  MONEDA: string;
  PRECIO: string;
  MONTO_MINIMO: string;
  CANTIDAD: string;
  ESTADO: string;
  CARACTERISTICAS: string;
}

export interface DataFamilies {
  ID_FAMILIA: string;
  FAMILIA: string;
  SUBFAMILIAS: Array<DataSubfamilies>;
}

export interface DataSubfamilies {
  ID_SUBFAMILIA: string;
  SUBFAMILIA: string;
}

export interface ItemFamily {
  expandable: boolean;
  name: string;
  level: number;
  id: string;
}

export interface TypeFormArticle {
  type:string;
  idArticle?: number;
}

export interface ObjectRequest {
  lineNumber: number;
  idArtitle: string;
  idProvider: string;
}



export interface ResponseDataLine {
  error: boolean;
  msg: string;
}

export interface DataTableResponse {
  CANTIDAD: number;
  CARACTERISTICAS: string;
  MODELO: string;
  CODIGO: string;
  MONEDA: string;
  MONEDA_DESCRIPCION: string;
  MONTO_MINIMO: number;
  NUMERO_INFORMACION: number;
  NUMERO_PRODUCTO: number;
  PRECIO: number;
}

export interface ShoppingCart {
  NUMERO_ARTICULO: number;
  NUMERO_DESCRIPCION: string;
  NUMERO_PROVEEDOR: string;
  IMAGENES: Array<string>;
  ARTICULO: string;
  CANTIDAD: number;
  CARACTERISTICAS: string;
  CODIGO: string;
  MODELO: string;
  MONEDA: string;
  MONEDA_DESCRIPCION: string;
  MONTO_MINIMO: number;
  NUMERO_INFORMACION: number;
  PRECIO: number;
}

export interface CreateRequestLineToShoppingCart {
  NUMERO_ARTICULO: number;
  NUMERO_PROVEEDOR: string;
  NUMERO_INFORMACION: number;
}

export interface ContentArtitle{
  idArtitle: string;
  idDescArtitle: string;
  idProvider: string;
  artitle: string;
  url_imagen: Array<SliderData>;
  content: Array<DataTableResponse>;
}

export interface ProductoDetails {
  ID_DESC_ARTI: string;
  ID_ARTICULO: string;
  CODIGO_ARTICULO: string;
  MODELO_ARTICULO: string;
  ID_ARTICULO_FAMILIA: string;
  FAMILIA_ARTICULO: string;
  ID_ARTICULO_SUBFAMILIA: string;
  SUBFAMILIA_ARTICULO: string;
  DESCRIPCION_ARTICULO: string;
  CARACTERISTICAS_ARTICULO: string;
  COMPRA_ARTICULO_WEB: string;
  ID_UNIDAD: string;
  UNIDAD: string;
  URL_ARTICULO_IMAGEN: Array<string>;
  ID_ARTICULO_PROVEEDOR: string;
  PROVEEDOR_ARTICULO: string;
  CODIGO_PRODUCTO: string;
  MODELO_PRODUCTO: string;
  NUMERO_SERIAL_PRODUCTO: string;
  PRECIO_PRODUCTO: number;
  CANTIDAD_PRODUCTO: number;
  CARACTERISTICAS_PRODUCTO: string;
  NUMERO_PRODUCTO: string;
}


export interface InformationArtitle {
  NO: string;
  IMAGEN: Array<string>;
  DATA_IMAGEN: Array<FileSelected>;
  DESCRIPCION: string;
  CARACTERISTICAS?: string | null;
  TIPO_UNIDAD: number;
  PROVEEDOR: InformationsData;
  COMPRA_WEB: boolean;
  ESTADO: string;
  DETAILS: Array<DetailsArtitle>;
  DELETE_FILE: Array<string>;
}


export interface SelectedFile {
  idFile: string;
  infoFile: InfoUpload;
}


export interface DetailsArtitle {
  NO: string;
  CODIGO: string;
  MODELO: string;
  MONEDA: string;
  PRECIO: string;
  MONTO_MINIMO: string;
  ESTADO: string;
  CARACTERISTICAS: string;
}


export interface ResponseFormDetails {
  typeForm: string;
  element: any;
  itemElement?: DetailsArtitle;
}

export interface DataFormDetails {
  element: InformationArtitle,
  itemElement: DetailsArtitle | null
}

export interface DataMoneda {
  codigo: string;
  moneda: string;
}

export interface ResponseDataGetArtitleByInformation {
  error: boolean;
  msg: string;
  response: GetArtitleByInformation;
}


export interface GetArtitleByInformation {
  INAR_IDIN: string; // Identificador de Información del artículo
  INAR_CODI: string; // Código del artículo
  INAR_MODE: string; // Modelo del artículo
  INAR_MONE: string; // Moneda
  INAR_PREC: string; // Precio
  INAR_CANT: string; // Cantidad
  INAR_CARA: string; // Características
  DEAR_IDDE: string; // Identificador de la descripción del artículo
  DEAR_DESC: string; // Descripción del artículo
  DEAR_CARA: string; // Características del artículo
  DEAR_COWE: string; // Compra web
  DEAR_TIPO: string; // Unidad
  DEAR_IMAG: Array<string>; // Imagen
  DEAR_IDUN: string; // Identificador de la unidad
  UNID_NOMB: string; // Nombre de la unidad
  UNID_ACRO: string; // Acrónimo de la familia
  DEAR_NUPR: string; // Número del proveedor
  ARTI_IDAR: string; // Identificador del artículo
  ARTI_IDFA: string; // Identificador de la familia
  FAMI_NOMB: string; // Nombre de la familia
  ARTI_IDSU: string; // Identificador de la subfamilia
  SUBF_NOMB: string; // Nombre de la subfamilia
  ARTI_CODI: string; // Código del artículo
  ARTI_NOMB: string; // Nombre del artículo
  PROV_NOCO: string; // Nombre comercial
  PROV_NOMB: string; // Nombre del proveedor
  PROV_APPA: string; // Apellido paterno del proveedor
  PROV_APMA: string; // Apellido materno del proveedor
  PROV_CORR: string; // Correo electrónico
  PROV_LAD1: string; // Lada 1
  PROV_TEL1: string; // Teléfono 1
  PROV_LAD2: string; // Lada 2
  PROV_TEL2: string; // Teléfono 2
  PROV_XRFC: string; // R.F.C
  PROV_XTAX: string; // TAX ID
  PROV_GIRO: string; // Giro empresarial
  PROV_TIPO: string; // Tipo
  PROV_SIWE: string; // Sitio Web
  PROV_MEPA: string; // Metodos de pago
}

export interface ResponseDataGetArtitlesByProvider {
  error: boolean;
  msg: string;
  response: Array<GetArtitlesByProvider>;
}

export interface GetArtitlesByProvider {
  DEAR_IDDE: number;
  DEAR_IMAG: Array<string>;
  DEAR_DESC: string;
  DEAR_CARA?: string;
  DEAR_COWE: boolean;
  DEAR_IDUN: GetUnit;
  DEAR_IDAR: number;
  DEAR_USRE: string;
  DEAR_FERE: string;
  DEAR_USMO?: string; 
  DEAR_FEMO?: string; 
  ARTI_IDAR: number;
  ARTI_IDFA: number;
  FAMI_NOMB: string;
  ARTI_IDSU: string;
  SUBF_NOMB: string;
  ARTI_CODI: string;
  ARTI_NOMB: string;
  DETAILS: Array<GetArtitleDetails>;
}

export interface GetArtitleDetails {
  INAR_IDIN: number;
  INAR_CODI: string;
  INAR_MODE: string;
  INAR_MONE: string;
  INAR_PREC: number;
  INAR_MOMI: number; 
  INAR_CARA: string;
  INAR_USRE: string; 
  INAR_FERE: string; 
  INAR_USMO?: string; 
  INAR_FEMO?: string; 
}
export interface GetUnit {
  UNID_IDUN: number;
  UNID_NOMB: string;
  UNID_ACRO?: string;
  UNID_USRE: string;
  UNID_FERE: string;
  UNID_USMO?: string;
  UNID_FEMO?: string;
}

export interface ObjResponseDownload {
  USER: string;
  PROVIDER: string;
  LINE_NUMBER: string;
  DOWNLOAD: Array<number>;
}

export interface ObjResponseUpload{
  PROVIDER: string;
  DOCUMENT: string;
  USER: string;
  LINE_NUMBER: string;
}

export interface ResponseDataGetUnits {
  error: boolean;
  msg: string;
  response: GetUnits[];
}

export interface GetUnits {
  ID_UNIDAD: number;
  UNIDAD: string;
  ACRONIMO: string;
  ESTADO: string;
  USUARIO_MODIFICA: string;
  FECHA_MODIFICA: string;
}

export interface DataDialogFormUnits { 
  TYPE: 'R' | 'M';
  ID?: number;
}

export interface RequestFormUnits {
  UNIDAD: string;
  ACRONIMO: string;
  USUARIO: string;
  NUMERO_LINEA: number;
}

export interface ResponseDataUnit {
  error: boolean;
  msg: string;
  response: GetUnits;
}

// REGISTRO DE ARTÍCULOS
export interface DialogInformationArtitle {
  type: 'R' | 'M';
  elementData?: DataDescriptionArticle,
  providersSelected: string[];
}


export interface FormRequestInformation {
  NUMERO_PROVEEDOR: string;
  PROVEEDOR: string;
  ID_UNIDAD: number;
  CANTIDAD_UNIDAD: number;
  UNIDAD: string;
  DESCRIPCION: string;
  CARACTERISTICAS: string;
  ARCHIVOS: TempFiles[];
}

export interface DataDescriptionArticle {
  ID_DESCRIPCION: number;
  NUMERO_PROVEEDOR: string;
  PROVEEDOR: string;
  ID_UNIDAD: number;
  UNIDAD: string;
  DESCRIPCION: string;
  CANTIDAD_UNIDAD: number;
  CARACTERISTICAS: string | null;
  ESTADO: 'Activo' | 'Eliminado';
  DETALLES: DataInformationArticle[];
  ARCHIVOS: TempFiles[];
}

export interface DataInformationArticle {
  ID_DETAILS: number;
  CODIGO: string;
  MODELO: string;
  MONEDA: string;
  PRECIO: number;
  MONTO_MINIMO: number;
  CARACTERISTICAS: string;
  ESTADO: 'Activo' | 'Eliminado';
}


export interface DialogDataFormInformation {
  type: 'R' | 'M';
  data: DataInformationArticle | null,
}

export interface FormRequestArticle {
  CODIGO: string;
  ARTICULO: string;
  FAMILIA: string;
  SUBFAMILIA: string;
  DESCRIPCION_ARTICULO: DataDescriptionArticle[];
  USUARIO: string;
  NUMERO_LINEA: number;
}


export interface ResponseDataGetArticleById {
  error: boolean;
  msg: string;
  response: GetArticleById;
}
export interface GetArticleById {
  ID_ARTICULO: number;
  FAMILIA: string;
  SUBFAMILIA: string;
  CODIGO: string;
  ARTICULO: string;
  ESTADO: string;
  DESCRIPCION_ARTICULO: DataDescriptionArticle[];
}