// 定义 IPage 接口
interface IPage {
    OwnerContainer: PageContainer | null;
}

// 定义 PageContainer 接口
interface PageContainer {
    ClosePage(): void;
    PushPage(actionName: string, importArgs?: Record<string, any>): string;
    PushPage(page: IPage): string;
}

// 定义 PageExtension 类
export class PageExtension {
    /**
     * 关闭并打开新的交易 - 扩展方法
     * @param target 当前的交易
     * @param actionName 交易的全名（例如:PlatformManage.T7801）
     * @param importArgs 维护视图数据
     */
    static CloseAndOpenTradePage(target: IPage, actionName: string, importArgs?: Record<string, any>): string {
        const tradePageContainer = target.OwnerContainer;
        if (!tradePageContainer) {
            return '00000000-0000-0000-0000-000000000000';
        }
        tradePageContainer.ClosePage();
        return tradePageContainer.PushPage(actionName, importArgs);
    }

    /**
     * 关闭并打开新的交易 - 扩展方法
     * @param target 当前的交易
     * @param page 要打开的页面
     */
    static CloseAndOpenTradePageWithPage(target: IPage, page: IPage): string {
        const tradePageContainer = target.OwnerContainer;
        if (!tradePageContainer) {
            return '00000000-0000-0000-0000-000000000000';
        }
        tradePageContainer.ClosePage();
        return tradePageContainer.PushPage(page);
    }

    /**
     * 打开交易 - 扩展方法
     * @param target 当前交易
     * @param actionName 交易的全名（例如:PlatformManage.T7801）
     * @param importArgs 维护视图数据
     */
    static OpenPage(target: IPage, actionName: string, importArgs?: Record<string, any>): string {
        const tradePageContainer = target.OwnerContainer;
        if (!tradePageContainer) {
            return '00000000-0000-0000-0000-000000000000';
        }
        return tradePageContainer.PushPage(actionName, importArgs);
    }

    /**
     * 打开交易 - 扩展方法
     * @param target 当前交易
     * @param page 要打开的页面
     */
    static OpenPageWithPage(target: IPage, page: IPage): string {
        if (!page) {
            throw new Error('page is not null');
        }
        const tradePageContainer = target.OwnerContainer;
        if (!tradePageContainer) {
            return '00000000-0000-0000-0000-000000000000';
        }
        return tradePageContainer.PushPage(page);
    }

    /**
     * 关闭页面
     * @param target 当前页面
     */
    static Close(target: IPage): void {
        const tradePageContainer = target.OwnerContainer;
        if (tradePageContainer) {
            tradePageContainer.ClosePage();
        }
    }
}