import { AptlyDocumentSchema } from './document.js';
import { AptlyBaseSchema, AptlyDBCrawlerCleaner, AptlyHistorySchema } from './extends.js';
import { AptlyMediaSrcSchema } from './media.js';
import { AptlyPriceSchema } from './price.js';
import { AptlyProducerSchema } from './producer.js';
import { AptlyDatabase, AptlyQuantityUnitCode } from '../enums/index.js';
export type AptlyProduct = AptlyProductSchema<string, string>;
export interface AptlyProductSchema<ID, DATE> extends AptlyDBCrawlerCleaner, AptlyBaseSchema<ID, DATE>, AptlyHistorySchema<ID, DATE> {
    organization?: ID | null;
    project?: ID | null;
    extends?: ID | AptlyProductSchema<ID, DATE>;
    status: AptlyProductStatus;
    database: AptlyDatabase;
    productNumber: string;
    itemNumber?: string;
    gtin?: string;
    gtins: string[];
    description: string;
    technicalDescription: string;
    images: AptlyProductImageSchema<ID, DATE>[];
    products?: (ID | AptlyProductSchema<ID, DATE>)[];
    url?: string;
    color?: string;
    colorLabel?: string;
    series?: string;
    style?: string;
    width?: string;
    height?: string;
    length?: string;
    depth?: string;
    volume?: string;
    circumference?: string;
    material?: string;
    baseQuantity: number;
    quantityUnitCode: AptlyQuantityUnitCode;
    unitCost?: number;
    netCost?: number;
    producer?: ID | AptlyProducerSchema<ID, DATE> | null;
    producerName: string;
    tags: string[];
    documents: (ID | AptlyDocumentSchema<ID, DATE>)[];
    createdBy: ID;
    importID?: ID;
    source?: string;
    title?: string;
    efoImageUrl?: string;
    efoFDVUrl?: string;
    nobbImageUrl?: string;
    nobbFDVUrl?: string;
    variants: AptlyProductVariantSchema<ID, DATE>[];
    created: DATE;
}
export declare enum AptlyProductStatus {
    None = 0,
    Active = 1,
    Expired = 2
}
export type AptlyProductImage = AptlyProductImageSchema<string, string>;
export interface AptlyProductImageSchema<ID, DATE> extends AptlyMediaSrcSchema<ID, DATE> {
    image: string;
    description?: string;
    featured?: boolean;
}
export type AptlyProductVariant = AptlyProductVariantSchema<string, string>;
export interface AptlyProductVariantSchema<ID, DATE> {
    _id: ID;
    title?: string;
    images: AptlyProductImageSchema<ID, DATE>[];
    documents: (ID | AptlyDocumentSchema<ID, DATE>)[];
    name?: string;
    description?: string;
    productNumber?: string;
    color?: string;
    colorLabel?: string;
    series?: string;
    material?: string;
    style?: string;
    width?: string;
    height?: string;
    length?: string;
    unitCost?: number;
}
export type AptlyProductImport = AptlyProductImportSchema<string, string>;
export interface AptlyProductImportSchema<ID, DATE> extends Partial<Omit<AptlyProductSchema<ID, DATE>, 'images' | 'documents'>> {
    images: string[];
    documents: string[];
}
export type AptlyProductWithPrice = AptlyProductWithPriceSchema<string, string>;
export interface AptlyProductWithPriceSchema<ID, DATE> extends AptlyProductSchema<ID, DATE> {
    price?: AptlyPriceSchema<ID, DATE>;
}
