import type { Transaction, TransactionObjectArgument } from "../../transactions/index.js";
import type { ServiceObject, ServiceAddress, TxString, ObjectResult, CallEnv, PassportObject, PermissionObject, MachineObject, ArbitrationObject, OrderObject, RewardObject, RepositoryObject, DiscountObject, BalanceType, GuardObject, PaymentObject, ReceivedObject, PaymentInfoObject, CoinParam, TypedPermissionObject, NamedObject, ProgressObject, AllocationAddress } from "../common.js";
import type { Allocators, DiscountType } from "../query/object.js";
import type { AllocatorsType } from "./allocation.js";
import type { CallResult } from "./base.js";
import { CallBase } from "./base.js";
import type { GuardSubmissionToFill } from "./guard.js";
import type { AccountOrMark_Address, ManyAccountOrMark_Address } from "../local/index.js";
import type { ReceivedBalanceOrRecently, ReceivedObjectsOrRecently } from "../query/received.js";
export declare const NAMED_OPERATOR_ORDER_PAYER = "";
export interface CallService_Data {
    object: TypedPermissionObject;
    order_new?: {
        buy: Buy;
        agents?: ManyAccountOrMark_Address;
        order_required_info?: string | null;
        transfer?: AccountOrMark_Address;
        namedNewOrder?: NamedObject;
        namedNewAllocation?: NamedObject;
        namedNewProgress?: NamedObject;
    };
    description?: string;
    location?: string;
    sales?: {
        op: "add" | "set";
        sales: ServiceSale[];
    } | {
        op: "remove";
        sales_name: string[];
    } | {
        op: "clear";
    };
    repositories?: {
        op: "add" | "set";
        objects: string[];
    } | {
        op: "remove";
        objects: string[];
    } | {
        op: "clear";
    };
    rewards?: {
        op: "add" | "set";
        objects: string[];
    } | {
        op: "remove";
        objects: string[];
    } | {
        op: "clear";
    };
    arbitrations?: {
        op: "add" | "set";
        objects: string[];
    } | {
        op: "remove";
        objects: string[];
    } | {
        op: "clear";
    };
    machine?: string | null;
    discount?: Discount;
    discount_destroy?: string[];
    customer_required?: string[];
    order_allocators?: Allocators | null;
    buy_guard?: string | null;
    compensation_fund_add?: CoinParam;
    compensation_locked_time_add?: number;
    compensation_fund_receive?: ReceivedBalanceOrRecently;
    owner_receive?: ReceivedObjectsOrRecently;
    pause?: boolean;
    publish?: boolean;
    um?: string | null;
}
export declare class CallService extends CallBase {
    data: CallService_Data;
    object_address: string | undefined;
    permission_address: string | undefined;
    new_permission_description: string | undefined;
    parameter_type: string | undefined;
    constructor(data: CallService_Data);
    protected prepare(env: CallEnv): Promise<void>;
    call(env: CallEnv): Promise<CallResult>;
    operate(env: CallEnv, tx: Transaction, passport?: PassportObject, submission?: GuardSubmissionToFill[]): Promise<void>;
    private checkPublished;
    private checkNotPublished;
    private checkNotPaused;
    private order_allowed;
}
export declare const MAX_SALE_COUNT = 50;
export declare const MAX_REPOSITORY_COUNT = 100;
export declare const MAX_ARBITRATION_COUNT = 20;
export declare const MAX_REWARD_COUNT = 20;
export declare const MAX_CUSTOMER_REQUIRED_INFO_COUNT = 10;
export declare const MAX_PUBKEY_LENGTH = 1024;
export declare const MAX_DISCOUNT_COUNT_ONCE = 1000;
export declare const MAX_DISCOUNT_RECEIVER_ONCE = 1000;
export declare const MAX_DISCOUNT_TOTAL_COUNT = 20000;
export declare const MAX_REQUIRED_INFO_SIZE = 20;
export declare const DEFAULT_COMPENSATION_LOCK_DURATION = 2592000000;
export declare const DISCOUNT_TYPE_RATES = 0;
export declare const DISCOUNT_TYPE_MINUS = 1;
export interface ServiceSale {
    name: string;
    price: BalanceType;
    stock: BalanceType;
    suspension: boolean;
    wip: string;
    wip_hash: string;
}
export interface ServiceBuyItem {
    name: string;
    stock: BalanceType;
    wip_hash: string;
}
export interface CompensationClaim {
    service: string;
    service_type: string;
    arbitration_object: ArbitrationObject;
    arbitration_type: string;
    order: OrderObject;
    arb: string;
}
export interface Buy {
    items: ServiceBuyItem[];
    total_pay: CoinParam;
    discount?: string;
    payment_remark?: string;
    payment_index?: number;
}
export interface Discount {
    name: string;
    discount_type: DiscountType;
    discount_value: BalanceType;
    benchmark?: number | bigint | string;
    time_ms_start?: number;
    time_ms_end: number;
    count: number;
    recipient: ManyAccountOrMark_Address | string[];
    transferable: boolean;
}
export type ServiceSaleObject = TransactionObjectArgument;
export type ServiceRequiredObject = TransactionObjectArgument;
export type ServiceQuoteObject = TransactionObjectArgument;
export declare function discount_send(tx: Transaction, discount: DiscountObject[], recipient: string): void;
export declare function discount_destroy(tx: Transaction, discount: DiscountObject[]): void;
interface BuyResult {
    order: OrderObject;
    progress?: ProgressObject;
    allocation?: AllocationAddress;
}
export declare const buy: (env: CallEnv, tx: Transaction, service: ServiceObject, service_type: string, machine: MachineObject | undefined | null, buy: Buy, passport?: PassportObject) => Promise<BuyResult | undefined>;
export declare function newService(tx: Transaction, service_type: string, permission: PermissionObject, description: TxString, passport?: PassportObject): ObjectResult;
export declare function description_set(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, description: TxString, passport?: PassportObject): void;
export declare function um_set(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, um: string | null, passport?: PassportObject): void;
export declare function location_set(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, location: TxString, passport?: PassportObject): void;
export declare function create(tx: Transaction, service: ServiceObject, service_type: string): ServiceAddress;
export declare function sales_add(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, sales: ServiceSale[], passport?: PassportObject): void;
export declare function sales_remove(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, sales_name: string[], passport?: PassportObject): void;
export declare function sales_clear(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, passport?: PassportObject): void;
export declare function sales_set(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, sales: ServiceSale[], passport?: PassportObject): void;
export declare function price_add(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, sale_name: TxString, price_add: BalanceType, passport?: PassportObject): void;
export declare function price_reduce(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, sale_name: TxString, price_reduce: BalanceType, passport?: PassportObject): void;
export declare function stock_add(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, sale_name: TxString, stock_add: BalanceType, passport?: PassportObject): void;
export declare function stock_reduce(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, sale_name: TxString, stock_reduce: BalanceType, passport?: PassportObject): void;
export declare function sale_suspension(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, sale_name: TxString, suspension: boolean, passport?: PassportObject): void;
export declare function repository_add(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, repository: RepositoryObject, passport?: PassportObject): void;
export declare function repository_remove(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, repositories: string[], passport?: PassportObject): void;
export declare function repository_clear(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, passport?: PassportObject): void;
export declare function buy_guard_set(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, guard: GuardObject | null, passport?: PassportObject): void;
export declare function machine_set(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, machine: MachineObject | null, passport?: PassportObject): void;
export declare function publish(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, passport?: PassportObject): void;
export declare function pause(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, bPaused: boolean, passport?: PassportObject): void;
export declare function customer_required_set(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, required_info: string[], passport?: PassportObject): void;
export declare function arbitrations_add(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, arbitration: ArbitrationObject, arbitration_type: string, passport?: PassportObject): void;
export declare function arbitrations_remove(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, arbitrations: string[], passport?: PassportObject): void;
export declare function arbitration_clear(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, passport?: PassportObject): void;
export declare function compensation_fund_add(env: CallEnv, tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, coin: CoinParam, passport?: PassportObject): Promise<void>;
export declare function compensation_lock_duration_set(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, duration_ms: number | string | bigint, passport?: PassportObject): void;
export declare function order_allocators_set(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, allocators: AllocatorsType | null, passport?: PassportObject): void;
export declare function reward_add(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, reward: RewardObject, reward_type: string, passport?: PassportObject): void;
export declare function reward_remove(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, rewards: string[], passport?: PassportObject): void;
export declare function reward_clear(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, passport?: PassportObject): void;
export declare function compensation_fund_receive(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, received_object: ReceivedObject, payment?: PaymentObject, passport?: PassportObject): void;
export declare function compensation_fund_withdraw(tx: Transaction, service: ServiceObject, service_type: string, payment_info: PaymentInfoObject, receipt: string, permission: PermissionObject, passport?: PassportObject): void;
export declare function discount(tx: Transaction, service: ServiceObject, service_type: string, permission: PermissionObject, discount: Discount, passport?: PassportObject): Promise<void>;
export {};
