import type { IMainThreadAction } 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: IMainThreadAction;

    /**
     * 主线程去调用 Worker 线程
     */
    public mainCallWorker(
        payload: WorkerPayload.<%=WorkerActionName%>.MainCallWorker
    ): Promise<WorkerReponse.<%=WorkerActionName%>.MainCallWorker> {
        return this.controller.requestPromise(<%=WorkerActionName%>ActionType.MainCallWorker, payload);
    }

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

    /**
     * 响应 Worker 线程的处理器
     */
    private workerCallMain(
        payload: WorkerPayload.<%=WorkerActionName%>.WorkerCallMain
    ): WorkerReponse.<%=WorkerActionName%>.WorkerCallMain {
        const response = {
            alloy: payload.hello.toString(),
            worker: payload.world.toString(),
        };
        return response;
    }
}
