import { AptlyBaseSchema } from './extends.js';
import { AptlyWebhookType } from '../enums/index.js';
import { AptlyAppSandbox, AptlyField, AptlyScopes } from '../core/index.js';
import { AptlyMediaSrcSchema } from './media.js';
export type AptlyApp = AptlyAppSchema<string, string>;
export interface AptlyAppSchema<ID, DATE> extends Omit<AptlyBaseSchema<ID, DATE>, 'archived'> {
    slug: string;
    description: string;
    installUrl: string;
    redirectUris: string[];
    clientSecret: string;
    user: ID;
    logo?: AptlyMediaSrcSchema<ID, DATE> | null;
    banner?: AptlyMediaSrcSchema<ID, DATE> | null;
    settings: AptlyAppSettingSchema<ID>[];
    webhooks: AptlyAppWebhookSchema<ID>[];
    menus: AptlyAppMenuSchema<ID, DATE>[];
    actions: AptlyAppActionSchema<ID>[];
    cost?: number;
    implements: AptlyAppImplementation[];
    sign?: {
        orderUrl: string;
    };
    payment?: {
        orderUrl: string;
        cancelUrl: string;
        captureUrl: string;
        voidUrl: string;
    };
}
export interface AptlyAppSignMethod {
    value: string;
    label: string;
}
export declare enum AptlyAppImplementation {
    Sign = "sign",
    Payment = "payment"
}
export declare enum AptlyAppImplementationSetting {
    SignCostPer = "costPerSign",
    SignMethod = "signMethod",
    PaymentSellerId = "seller_id"
}
export type AptlyAppSetting = AptlyAppSettingSchema<string>;
export interface AptlyAppSettingSchema<ID> extends AptlyField {
    _id: ID;
    key: string;
    defaultValue: any;
    scope?: AptlyScopes | null;
}
export type AptlyAppWebhook = AptlyAppWebhookSchema<string>;
export interface AptlyAppWebhookSchema<ID> {
    _id: ID;
    types: AptlyWebhookType[];
    url: string;
}
export declare enum AptlyUserInjection {
    Base = "",
    Admin = "admin"
}
export declare enum AptlyAdminInjection {
    Base = "",
    Content = "content",
    Modules = "modules",
    Admin = "admin"
}
export declare enum AptlyOrganizationInjection {
    Base = "",
    Project = "project",
    Options = "options",
    Service = "service",
    Products = "products",
    Content = "content",
    Admin = "admin"
}
export declare enum AptlyProjectInjection {
    Base = "",
    Options = "options",
    Service = "service",
    Products = "products",
    Content = "content",
    Project = "project",
    Support = "support",
    Admin = "admin"
}
export declare enum AptlyUnitInjection {
    Base = "",
    Options = "options",
    Service = "service",
    Reports = "reports",
    Support = "support",
    Admin = "admin"
}
export type AptlyAppInjectionMenu = `organization-${AptlyOrganizationInjection}` | `project-${AptlyProjectInjection}` | `unit-${AptlyUnitInjection}`;
export declare enum AptlyAppInjectionType {
    Iframe = "iframe"
}
export type AptlyAppMenu = AptlyAppMenuSchema<string, string>;
export interface AptlyAppMenuSchema<ID, DATE> {
    _id: ID;
    type: AptlyAppInjectionType;
    menu: AptlyAppInjectionMenu[];
    model: AptlyScopes;
    label: string;
    icon?: AptlyMediaSrcSchema<ID, DATE> | null;
    src: string;
    sandbox: AptlyAppSandbox[];
}
export type AptlyAppAction = AptlyAppActionSchema<string>;
export interface AptlyAppActionSchema<ID> {
    _id: ID;
    model: AptlyAppActionModel;
    scope: AptlyScopes;
    webhook: AptlyWebhookType;
    label: string;
    stateJSON: string;
}
export declare enum AptlyAppActionModel {
    Order = "Order"
}
