import {Layout, EventType, Event} from './layout'

    export class LayoutAdaptor extends Layout {

        // dummy functions in case not defined by client
        trigger(e: Event) {};
        kick() {};
        drag() {};
        on(eventType: EventType | string, listener: () => void) : this { return this; };

        dragstart: (d:any) => void;
        dragStart: (d:any) => void;
        dragend: (d:any) => void;
        dragEnd: (d:any) => void;

        constructor( options ) {
            super();

            // take in implementation as defined by client

            var self = this;
            var o = options;

            if ( o.trigger ) {
                this.trigger = o.trigger;
            }

            if ( o.kick ){
                this.kick = o.kick;
            }

            if ( o.drag ){
                this.drag = o.drag;
            }

            if ( o.on ){
                this.on = o.on;
            }

            this.dragstart = this.dragStart = Layout.dragStart;
            this.dragend = this.dragEnd = Layout.dragEnd;
        }
    }

    /**
     * provides an interface for use with any external graph system (e.g. Cytoscape.js):
     */
    export function adaptor( options ): LayoutAdaptor {
        return new LayoutAdaptor( options );
    }
