import { FormName, TabName, AttributeName } from './NameTypes';
import { ScriptRegistry } from './ScriptRegistry';
import { FormProxy } from './FormProxy';

export function registration<T extends FormProxy>(logicalName: string, formProxy: (new() => T), ...formNames: Array<FormName>){
    return (ctor: Function) => {
        let classObject = ctor.prototype;

        ScriptRegistry.ClassName = ctor.toString();
        ScriptRegistry.LogicalName = logicalName;
        ScriptRegistry.ProxyType = formProxy;
        ScriptRegistry.FormNames = formNames;
        ScriptRegistry.HasOnLoad = classObject.hasOwnProperty('onLoad');
        ScriptRegistry.HasOnSave = classObject.hasOwnProperty('onSave');
    };
}

export function tabStateChange(formName: FormName, tabName: TabName) {
    return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
        console.log(propertyKey);
        console.dir(target);
    };
}

export function attributeChange(formName: FormName, attributeName: AttributeName) {
    return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
        console.log(propertyKey);
        console.dir(target);
    };
}

export function attributeVisibility(attributeName: AttributeName, dependentAttribute: AttributeName) {
    return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
        console.log(propertyKey);
        console.dir(target);
    };
}