import type { Transaction } from "../../transactions/index.js";
import type { DemandObject, DemandAddress, TxString, ObjectResult, PassportObject, PermissionObject, GuardObject, ServiceObject, WithPermissionObject, CallEnv } from "../common.js";
import type { AccountOrMark_Address } from "../local/index.js";
import type { ServiceGuard } from "../query/object.js";
import type { ReceivedObjectsOrRecently } from "../query/received.js";
import type { CallResult } from "./base.js";
import { CallBase } from "./base.js";
import type { GuardSubmissionToFill } from "./guard.js";
export interface DemandPresent {
    recommend: string;
    by_guard?: string;
    service?: string;
}
export interface ServiceInfo {
    recommend: string;
    service: string | undefined;
    update_time: number;
    acceptance_score: number | undefined;
    feedback: string;
    feedback_time: number;
}
export interface FeedbackInfo {
    who: AccountOrMark_Address;
    acceptance_score?: number;
    feedback?: string;
}
export interface CallDemand_Data {
    object: WithPermissionObject;
    present?: DemandPresent;
    description?: string;
    location?: string;
    rewards?: {
        op: "add" | "set";
        objects: string[];
    } | {
        op: "remove";
        objects: string[];
    } | {
        op: "clear";
    };
    feedback?: FeedbackInfo[];
    guards?: {
        op: "add" | "set";
        guard: ServiceGuard[];
    } | {
        op: "remove";
        guard: string[];
    } | {
        op: "clear";
    };
    owner_receive?: ReceivedObjectsOrRecently;
    um?: string | null;
}
export declare class CallDemand extends CallBase {
    data: CallDemand_Data;
    object_address: string | undefined;
    permission_address: string | undefined;
    new_permission_description: string | undefined;
    constructor(data: CallDemand_Data);
    protected prepare(env: CallEnv): Promise<void>;
    call(env: CallEnv): Promise<CallResult>;
    operate(env: CallEnv, tx: Transaction, passport?: PassportObject, submission?: GuardSubmissionToFill[]): Promise<void>;
}
export declare const MAX_REWARD_COUNT = 20;
export declare const MAX_GUARD_COUNT = 20;
export declare const MAX_FEEDBACK_COUNT = 20;
export declare function create(tx: Transaction, demand: DemandObject): DemandAddress;
export declare function present(tx: Transaction, demand: DemandObject, recommend: TxString, by_guard?: string, service?: ServiceObject, service_type?: string, passport?: PassportObject): void;
export declare function newDemand(tx: Transaction, permission: PermissionObject, description: TxString, passport?: PassportObject): ObjectResult;
export declare function description_set(tx: Transaction, demand: DemandObject, permission: PermissionObject, description: TxString, passport?: PassportObject): void;
export declare function location_set(tx: Transaction, demand: DemandObject, permission: PermissionObject, location: TxString, passport?: PassportObject): void;
export declare function guard_add(tx: Transaction, demand: DemandObject, permission: PermissionObject, guard: GuardObject, service_identifier: number | undefined | null, passport?: PassportObject): void;
export declare function guard_remove(tx: Transaction, demand: DemandObject, permission: PermissionObject, guards: string[], passport?: PassportObject): void;
export declare function guard_clear(tx: Transaction, demand: DemandObject, permission: PermissionObject, passport?: PassportObject): void;
export declare function reward_add(tx: Transaction, demand: DemandObject, permission: PermissionObject, reward: string, reward_type: string, passport?: PassportObject): void;
export declare function reward_remove(tx: Transaction, demand: DemandObject, permission: PermissionObject, rewards: string[], passport?: PassportObject): void;
export declare function reward_clear(tx: Transaction, demand: DemandObject, permission: PermissionObject, passport?: PassportObject): void;
export declare function feedback(tx: Transaction, demand: DemandObject, permission: PermissionObject, who: string, acceptance_score: number | undefined | null, feedback?: string, passport?: PassportObject): void;
export declare function um_set(tx: Transaction, demand: DemandObject, permission: PermissionObject, um: string | null, passport?: PassportObject): void;
