import { AptlyDocumentSchema } from './document.js';
import { AptlyBaseSchema, AptlyDBCrawlerCleaner, AptlyHistorySchema } from './extends.js';
import { AptlyMediaSrcSchema } from './media.js';
import { AptlyProducerSchema } from './producer.js';
import { AptlyTagSchema } from './tag.js';
export type AptlyProduct = AptlyProductSchema<string, string>;
export interface AptlyProductSchema<ID, DATE> extends AptlyDBCrawlerCleaner, AptlyBaseSchema<ID, DATE>, AptlyHistorySchema<ID, DATE> {
    searchableName: string;
    organization?: ID;
    project?: ID;
    base?: boolean;
    extends?: ID | AptlyProductSchema<ID, DATE>;
    productNumber: string;
    itemNumber?: string;
    eanNumber?: string;
    gtin?: string;
    description: string;
    images: AptlyProductImageSchema<ID, DATE>[];
    variants: AptlyProductVariantSchema<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;
    unitCost?: number;
    netCost?: number;
    producer?: ID | AptlyProducerSchema<ID, DATE> | null;
    supplier?: ID;
    tags: (ID | AptlyTagSchema<ID, DATE>)[];
    documents: (ID | AptlyDocumentSchema<ID, DATE>)[];
    createdBy: ID;
    stats?: any;
    importID?: ID;
    source?: string;
    title?: string;
    likes: {
        user: ID;
        date: DATE;
    }[];
    created: DATE;
}
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[];
}
