import { IContext, IUIService } from '@/core';
/**
 * 界面服务注册中心
 * 基于template/src/register/ui-service-register.ts.hbs生成
 *
 * @export
 * @class UIServiceRegister
 */
export class UIServiceRegister {

	/**
	 * 界面服务注册中心对象
	 *
	 * @private
	 * @static
	 * @type {UIServiceRegister}
	 * @memberof UIServiceRegister
	 */
	private static register: UIServiceRegister;

	/**
	 * Creates an instance of UIServiceRegister.
	 * 禁止使用new获取界面服务注册中心对象
	 * @memberof UIServiceRegister
	 */
	private constructor() {}

	/**
	 * 获取实体服务注册中心对象
	 *
	 * @static
	 * @return {*}  {UIServiceRegister}
	 * @memberof UIServiceRegister
	 */
	static getInstance(): UIServiceRegister {
		if (!this.register) {
			this.register = new UIServiceRegister();
		}
		return this.register;
	}

	/**
	 * 获取界面服务
	 *
	 * @param {string} name 界面名称
	 * @param {IContext} [context={}] 应用上下文
	 * @return {*}  {Promise<any>}
	 * @memberof UIServiceRegister
	 */
	public async getService(name: string, context: IContext = {}): Promise<IUIService> {
		const targetService: any = await (this as any)[`get${name}Service`](context);
		return targetService;
	}

	{{#each app.allPSAppDataEntities as | entity |}}
	/**
	 * {{entity.logicName}}服务
	 *
	 * @param {IContext} [context={}]
	 * @return {*}  {Promise<any>}
	 * @memberof EntityServiceRegister
	 */
	async get{{pascalCase entity.codeName}}Service(context: IContext = {}): Promise<IUIService> {
		return (await import ('@/ui-service/{{spinalCase entity.codeName}}/{{spinalCase entity.codeName}}-ui-service')).default.getInstance(context);
	}

	{{/each}}

}