import type { IWorkerThreadAction } from './index';
import BaseAction from '../common/base-action';
import { WorkerPayload, WorkerReponse } from '../common/payload-type';
import { <%=WorkerActionName%>ActionType } from '../common/action-type';

/**
 * <%=WorkerActionName%>
 */
export default class <%=WorkerActionName%> extends BaseAction {
    protected threadAction: IWorkerThreadAction;

    /**
     * Worker 线程去调用主线程
     */
    public workerCallMain(
        payload: WorkerPayload.<%=WorkerActionName%>.WorkerCallMain = {
            hello: -1,
            world: +1,
        }
    ): Promise<WorkerReponse.<%=WorkerActionName%>.WorkerCallMain> {
        return this.controller.requestPromise(<%=WorkerActionName%>ActionType.WorkerCallMain, payload);
    }

    protected addActionHandler(): void {
        this.controller.addActionHandler(<%=WorkerActionName%>ActionType.MainCallWorker, this.mainCallWorker.bind(this));
    }

    /**
     * 响应主线程的处理器
     */
    private async mainCallWorker(
        payload: WorkerPayload.<%=WorkerActionName%>.MainCallWorker = 'hello'
    ): Promise<WorkerReponse.<%=WorkerActionName%>.MainCallWorker> {
        // 通过 async await 实现异步逻辑
        await new Promise((resolve) => {
            setTimeout(() => {
                resolve();
            }, 1000);
        });

        // 1000ms 后再返回结果
        const response = `${payload}, from Worker Thread.`;
        return response;
    }
}
