import { Component, ViewEncapsulation, NO_ERRORS_SCHEMA } from '@angular/core';
import { UserDefinedExecutionContext } from '@wm/core';
import { initScript } from './{{name}}.component.script';
import { getVariables } from './{{name}}.component.variables';
import { expressionData } from './{{name}}.component.expressions';
import { CommonModule } from '@angular/common';
import { {{#if enableSpa}}BaseSpaPageComponent{{else}}BasePageComponent{{/if}} } from '@wm/runtime/base';

{{WMComponentsImportStmts requiredWMComponents}}
{{WMCustomComponentsImportStmts requireCustomComponents}}
{{PartialModuleImportStmts requiredPartials}}

{{#if requireCustomComponents}}
import { initCustomWidgetConfig } from '../../customwidgets/customwidget-config';
initCustomWidgetConfig();
{{/if}}

const requiredComponentModules = [
    {{WMComponentModuleStmts requiredWMComponents}}
];

const requiredCustomWidgetComponents= [
    {{WMCustomComponentStmts requireCustomComponents}}
]

const requiredPartialModules: any[] = [
    {{PartialModuleStmts requiredPartials}}
];

@Component({
    selector: 'app-page-{{name}}',
    templateUrl: './{{name}}.component.html',
    styleUrls: ['./{{name}}.component.css'],
    encapsulation: ViewEncapsulation.None,
    providers: [
        {
            provide: UserDefinedExecutionContext,
            useExisting: {{componentName}}
        }
    ],
    standalone: true,
    imports: [
        ...requiredComponentModules,
        ...requiredPartialModules,
        ...requiredCustomWidgetComponents, 
        CommonModule,
    ],
    {{#if hasCustomElement}}
    schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
    {{/if}}
})
export class {{componentName}} extends {{#if enableSpa}}BaseSpaPageComponent{{else}}BasePageComponent{{/if}} {

    override pageName = '{{name}}';
    [key: string]: any;

    constructor() {
        super();
        super.init();
    }

    getVariables() {
        return getVariables();
    }

    evalUserScript(Page, App, Utils) {
        initScript(Page, App, Utils);
    }

    getExpressions() {
        return expressionData;
    }

}
