import { AptlyQuantityUnitCode } from '../enums/index.js';
import { AptlyAllowance, AptlyExtensionAmount, AptlyPrice, AptlyAllowanceChargeItemSchema } from './algorithm.js';
import { AptlyBaseSchema } from './extends.js';
import { AptlyItemSchema, AptlyItemType } from './item.js';
import { AptlyMediaSrcSchema } from './media.js';
import { AptlyOfferSchema } from './offer.js';
import { AptlyOrganizationSchema } from './organization.js';
import { AptlyPeriodSchema } from './period.js';
import { AptlyProducerSchema } from './producer.js';
import { AptlyProductSchema } from './product.js';
import { AptlyProjectSchema } from './project.js';
import { AptlyCategorySchema } from './category.js';
import { AptlyUnitSchema } from './unit.js';
import { AptlyDocumentSchema } from './document';
export type AptlyOption = AptlyOptionSchema<string, string>;
export interface AptlyOptionSchema<ID, DATE> extends AptlyBaseSchema<ID, DATE> {
    organization: ID | AptlyOrganizationSchema<ID, DATE>;
    project: ID | AptlyProjectSchema<ID, DATE>;
    unit: ID | AptlyUnitSchema<ID, DATE> | null;
    product: ID | AptlyProductSchema<ID, DATE> | null;
    producer: ID | AptlyProducerSchema<ID, DATE> | null;
    offer: ID | AptlyOfferSchema<ID, DATE> | null;
    category: ID | null;
    option: ID | AptlyOptionSchema<ID, DATE> | null;
    offerItem: ID | null;
    period: ID | AptlyPeriodSchema<ID, DATE> | null;
    algorithm: ID | null;
    thumbnail: AptlyMediaSrcSchema<ID, DATE> | null;
    variants: (ID | AptlyOptionSchema<ID, DATE>)[];
    lines: AptlyOptionLineSchema<ID, DATE>[];
    documents: (ID | AptlyDocumentSchema<ID, DATE>)[];
    title: string;
    description: string;
    identification: string;
    note: string;
    index: number;
    type: AptlyItemType;
    quantity?: number;
    quantityUnitCode: AptlyQuantityUnitCode;
    quantityCategory: ID | AptlyCategorySchema<ID, DATE> | null;
    quantityCategoryKey?: string;
    amount: number;
    amountCategory: ID | AptlyCategorySchema<ID, DATE> | null;
    amountCategoryKey?: string;
    isTotalSum: boolean;
    allowance?: AptlyAllowance | null;
    allowanceCharge: AptlyAllowanceChargeItemSchema<ID, boolean>[];
}
export type AptlyOptionLine = AptlyOptionLineSchema<string, string>;
export interface AptlyOptionLineSchema<ID, DATE> {
    _id: ID;
    option: ID | AptlyOptionSchema<ID, DATE>;
    quantity: number;
}
export type AptlyOptionPopulated = AptlyOptionPopulatedSchema<string, string>;
export interface AptlyOptionPopulatedSchema<ID, DATE> extends Omit<AptlyOptionSchema<ID, DATE>, 'product'>, AptlyExtensionAmount {
    invoicedQuantity: number;
    item: AptlyItemSchema<ID, DATE>;
    price: AptlyPrice;
    quantityCategory: AptlyCategorySchema<ID, DATE> | null;
    amountCategory: AptlyCategorySchema<ID, DATE> | null;
    period: AptlyPeriodSchema<ID, DATE> | null;
    product: AptlyProductSchema<ID, DATE> | null;
}
export interface AptlyOptionImportBody {
    action: 'add' | 'edit';
    noErrorOnDuplicate?: boolean;
    noErrorOnProductNotFound?: boolean;
    options?: Partial<AptlyOptionPostBody>[];
}
export interface AptlyOptionPostBody extends AptlyOptionSchema<string, string> {
    __amount?: string;
    productNumber?: string | null;
}
