/**
 * 決済取引サービス
 */
import * as GMO from '@motionpicture/gmo-service';
import * as factory from '../../factory';
import { Settings } from '../../settings';
import type { AcceptedOfferRepo } from '../../repo/acceptedOffer';
import type { AccountingReportRepo } from '../../repo/accountingReport';
import type { ActionRepo } from '../../repo/action';
import type { AssetTransactionRepo } from '../../repo/assetTransaction';
import type { CredentialsRepo } from '../../repo/credentials';
import type { EventRepo } from '../../repo/event';
import type { OrderRepo } from '../../repo/order';
import type { PaymentServiceRepo } from '../../repo/paymentService';
import type { PaymentServiceProviderRepo } from '../../repo/paymentServiceProvider';
import type { PotentialActionRepo } from '../../repo/potentialAction';
import type { ProductRepo } from '../../repo/product';
import type { SellerPaymentAcceptedRepo } from '../../repo/sellerPaymentAccepted';
import type { TaskRepo } from '../../repo/task';
import * as CreditCardPayment from '../payment/creditCard';
import * as MovieTicketPayment from '../payment/movieTicket';
export interface IStartOperationRepos {
    accountingReport: AccountingReportRepo;
    action: ActionRepo;
    credentials: CredentialsRepo;
    event: EventRepo;
    paymentAccepted: SellerPaymentAcceptedRepo;
    paymentService: PaymentServiceRepo;
    paymentServiceProvider: PaymentServiceProviderRepo;
    potentialAction: PotentialActionRepo;
    product: ProductRepo;
    assetTransaction: AssetTransactionRepo;
    task: TaskRepo;
}
export type IStartOperation<T> = (repos: IStartOperationRepos, settings: Settings) => Promise<T>;
export interface ICancelRepos {
    assetTransaction: AssetTransactionRepo;
}
export type ICancelOperation<T> = (repos: ICancelRepos) => Promise<T>;
export interface IConfirmRepos {
    acceptedOffer: AcceptedOfferRepo;
    action: ActionRepo;
    accountingReport: AccountingReportRepo;
    assetTransaction: AssetTransactionRepo;
    event: EventRepo;
    order: OrderRepo;
    task: TaskRepo;
}
export type IConfirmOperation<T> = (repos: IConfirmRepos) => Promise<T>;
export type IExportTasksOperation<T> = (repos: {
    task: TaskRepo;
    assetTransaction: AssetTransactionRepo;
}) => Promise<T>;
export type ICheckOperation<T> = (repos: {
    action: ActionRepo;
    credentials: CredentialsRepo;
    event: EventRepo;
    paymentAccepted: SellerPaymentAcceptedRepo;
    paymentService: PaymentServiceRepo;
    paymentServiceProvider: PaymentServiceProviderRepo;
}, settings: Settings) => Promise<T>;
export type IPublishPaymentUrlOperation<T> = (repos: {
    action: ActionRepo;
    paymentAccepted: SellerPaymentAcceptedRepo;
    paymentService: PaymentServiceRepo;
    paymentServiceProvider: PaymentServiceProviderRepo;
}, settings: Settings) => Promise<T>;
export type IPublishPaymentUrlResult = CreditCardPayment.IPaymentAgencyTransaction & {
    paymentMethodId: string;
    paymentUrl: string;
};
/**
 * 決済ロケーション発行
 */
export declare function publishPaymentUrl(params: Pick<factory.assetTransaction.pay.IStartParamsWithoutDetail, 'agent' | 'location' | 'project' | 'recipient' | 'transactionNumber' | 'typeOf'> & {
    object: factory.action.accept.pay.IPayObject;
    /**
     * add identifier for an unique index(2025-02-25~)
     */
    identifier?: string;
}, options: {
    purposeAsTransaction: {
        id: string;
    };
    /**
     * 実行者
     */
    executor?: {
        /**
         * task ID
         * taskによって実行されている場合値が存在する
         */
        id?: string;
    };
}): IPublishPaymentUrlOperation<IPublishPaymentUrlResult>;
/**
 * 決済方法認証
 */
export declare function check(params: factory.action.check.paymentMethod.movieTicket.IAttributes): ICheckOperation<{
    result: MovieTicketPayment.ICheckResult;
}>;
export import IPaymentAgencyTransaction = CreditCardPayment.IPaymentAgencyTransaction;
/**
 * 取引開始
 */
export declare function start(params: factory.assetTransaction.pay.IStartParamsWithoutDetail & {
    instrument: factory.action.trade.pay.IInstrument[];
}, options: {
    pendingPaymentAgencyTransaction?: CreditCardPayment.IPaymentAgencyTransaction;
    /**
     * 実行者
     */
    executor?: {
        /**
         * task ID
         * taskによって実行されている場合値が存在する
         */
        id?: string;
    };
    purpose: {
        /**
         * placeOrder ID
         */
        id?: string;
    };
    checkedAction: {
        id: string;
    };
}): IStartOperation<Pick<factory.assetTransaction.pay.ITransaction, 'id' | 'object'>>;
/**
 * 取引確定
 */
export declare function confirm(params: factory.assetTransaction.pay.IConfirmParams & {
    options: {};
}): IConfirmOperation<void>;
/**
 * 取引中止
 */
export declare function cancel(params: {
    id?: string;
    transactionNumber?: string;
}): ICancelOperation<void>;
/**
 * 取引のタスク出力
 */
export declare function exportTasksById(params: {
    id: string;
    /**
     * タスク実行日時バッファ
     */
    runsTasksAfterInSeconds?: number;
}): IExportTasksOperation<{
    id: string;
}[]>;
/**
 * 決済代行取引参照
 */
export declare function searchGMOTrade(params: {
    transactionNumber: string;
}): (repos: {
    paymentAccepted: SellerPaymentAcceptedRepo;
    paymentService: PaymentServiceRepo;
    paymentServiceProvider: PaymentServiceProviderRepo;
    assetTransaction: AssetTransactionRepo;
}, settings: Settings) => Promise<GMO.factory.credit.ISearchTradeResult>;
