package org.yuanrong.m2s.function;

import org.yuanrong.services.runtime.Context;
import org.yuanrong.m2s.runtime.api.runtime.APIGTriggerEvent;
import org.yuanrong.m2s.runtime.api.runtime.APIGTriggerResponse;
import org.yuanrong.m2s.sdk.api.Handler;
${ImportClasses}

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class ${FunctionHandlerName} {
    private volatile ApplicationContext applicationContext;

    public APIGTriggerResponse handle(APIGTriggerEvent event, Context context) {
        this.initializer(context);
        return ((Handler) this.applicationContext.getBean("${FunctionHandlerClassName}")).handle(event, context);
    }

    public void initializer(Context context) {
        if (this.applicationContext == null) {
            synchronized (${FunctionHandlerName}.class) {
                if (this.applicationContext == null) {
                    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
                    ${RegisterConfigs}
                    ctx.refresh();
                    this.applicationContext = ctx;
                }
            }
        }
    }
}