import { 
    ConfigParams, IConfigurable, IOpenable, Context, IReferences, 
    Parameters, IReferenceable, IUnreferenceable, IExecutable 
} from "pip-services4-components-node";

export class MyComponentA implements IReferenceable, IUnreferenceable, IConfigurable, IOpenable, IExecutable {

    private _open = false;

    public constructor() {
        console.log("MyComponentA has been created.");
    }

    public configure(config: ConfigParams): void {
        console.log("MyComponentA has been configured.");
    }

    public setReferences(references: IReferences): void {
        console.log("MyComponentA's references have been defined.");
    }

    public unsetReferences(): void {
        console.log("References cleared");
    }

    public isOpen(): boolean {
        return this._open;
    }

    public async open(ctx: Context): Promise<void> {
        console.log("MyComponentA has been opened.");
    }

    public async close(ctx: Context): Promise<void> {
        console.log("MyComponentA has been closed.");
    }

    public async execute(ctx: Context, args: Parameters): Promise<any> {
        console.log("Executing");
        let result = args;
        return result;
    }
}