var WODAViews = Namespace.declare("tla.EAM.layer3",
    class WODAViews extends Interface {

        constructor() {
            super();
        }

        init(controller) {
            return this;
        }

        getDefaultView() {
            if (this.defaultView)
                return this.defaultView;

            this.defaultView = null;
            return this.defaultView;
        }
        getItemView() {
            if (this.itemView)
                return this.itemView;

            this.itemView = DefaultItem.getInstance();
            return this.itemView;
        }
        getOverView() {
            if (this.overView)
                return this.overView;

            this.overView = DefaultOverview.getInstance();
            return this.overView;
        }
        getDetailsView() {
            if (this.detailsView)
                return this.detailsView;

            this.detailsView = DefaultDetails.getInstance();
            return this.detailsView;
        }
        getActionView() {
            if (this.actionView)
                return this.actionView;

            this.actionView = null;
            return this.actionView;
        }
    }
);

var WODA = Namespace.declare("com.ceruleanCircle.EAM.5_ux",
    class WODA extends UcpComponent {

        static start() {
            var TheLastApp = window["TheLastApp"] = window["TheLastApp"] || new this();
            //document.weBeans.find();
            document.weBeans.registry.WODA.append(document.body);

            console.log("TheLastApp is ready ", TheLastApp.type.dependencyTree);
            TheLastApp.init();

        }
        static dependencies() {
            return [
                new IOR().init("/EAMD.ucp/Components/com/twitter/Bootstrap/3.3.7-Once/Bootstrap.component.xml"),

                // @todo move to OverviewPanel
                new IOR().init("/EAMD.ucp/Components/ski/kornel/SlipJS/2.1.0/SlipJS.component.xml"),

                new IOR().init("/EAMD.ucp/Components/com/twitter/Bootstrap/Panel/0.1.0/Panel.component.xml"),
                new IOR().init("/EAMD.ucp/Components/com/ceruleanCircle/EAM/5_ux/WODA/WhatPanel/0.1.0/WhatPanel.component.xml"),
                new IOR().init("/EAMD.ucp/Components/com/ceruleanCircle/EAM/5_ux/WODA/OverviewPanel/0.4.0/OverviewPanel.component.xml"),
                new IOR().init("/EAMD.ucp/Components/com/ceruleanCircle/EAM/5_ux/WODA/DetailsPanel/0.1.0/DetailsPanel.component.xml"),
                new IOR().init("/EAMD.ucp/Components/com/ceruleanCircle/EAM/5_ux/WODA/ActionsPanel/0.1.0/ActionsPanel.component.xml"),

                new IOR().init("/EAMD.ucp/Components/com/ceruleanCircle/EAM/5_ux/WODA/WhatPanel/DefaultItem/0.1.0/DefaultItem.component.xml"),
                new IOR().init("/EAMD.ucp/Components/com/ceruleanCircle/EAM/5_ux/WODA/OverviewPanel/DefaultOverview/0.4.0/DefaultOverview.component.xml"),
                new IOR().init("/EAMD.ucp/Components/com/ceruleanCircle/EAM/5_ux/WODA/DetailsPanel/DefaultDetails/0.1.0/DefaultDetails.component.xml")
            ];
        }

        constructor() {
            super();
            Thinglish.implement(this, WODAViews, true);
            // @todo remove if implemented by Thing
            Thinglish.implement(this, UcpComponent, true);


            //this.type = "WODA";
        }

        init() {
            this.what = WODA.WhatPanel["0_1_0"].WhatPanel.testInstance;
            this.overview = WODA.OverviewPanel["0_4_0"].OverviewPanel.testInstance;
            this.details = WODA.DetailsPanel["0_1_0"].DetailsPanel.testInstance;
            this.actions = WODA.ActionsPanel["0_1_0"].ActionsPanel.testInstance;
            /*
                        this.what.init(this.what.constructor.controller);
                        this.overview.init(this.overview.constructor.controller);
                        this.details.init(this.details.constructor.controller);
                        this.actions.init(this.actions.constructor.controller);

                        this.what.controller._eventSupport.addEventListener("select", this, this.handleSelection.bind(this));
                        this.overview.controller._eventSupport.addEventListener("select", this, this.handleSelection.bind(this));
                        this.details.controller._eventSupport.addEventListener("select", this, this.handleSelection.bind(this));
            */
            this.templateMaxDepth = 3;
            this.name = "The Last App you will ever need";

            return this;
        }


        handleSelection(event, item) {
            var This = event.target;
            if (event.source != This.overview)
                This.overview.select(item);

            This.details.selectedItem = item;
            This.actions.selectedItem = item;

        }


        goToRepository() {
            window.location.href = "http://structr.cerulean.it:6082/WODA-i7/b305af4c135f4ef0bdecb328e09d6362";
        }
        goStructrRepository() {
            window.location.href = "http://structr.cerulean.it:6082/WODA-i7/21a808a48b7745b2b2f7076d6ec4be09 ";
        }

        get wodaWeBeanNode() {
            return document.querySelector("[id*='WODA']").weBeanNode;
        }
        get wodaPanelWeBeanNode() {
            return this.wodaWeBeanNode.element.children[0].weBeanNode;
        }


        start() {
            document.weBeans.find();
            document.weBeans.registry.WODA.append(document.body);

        }

    }
);


var ItemView = Namespace.declare("tla.EAM.layer3.WODAViews",
    class ItemView extends UcpView {
        get name() {}
        get title() {}
        get type() {}
        get description() {}
    }
);

var OverView = Namespace.declare("tla.EAM.layer3.WODAViews",
    class OverView extends UcpView {
        get paginationSize() {}
        set paginationSize(newValue) {}
        get nextPage() {}
    }
);

var DetailsView = Namespace.declare("tla.EAM.layer3.WODAViews",
    class DetailsView extends UcpView {

    }
);


var EditView = Namespace.declare("tla.EAM.layer3.WODAViews",
    class EditView extends UcpView {

    }
);

var DefaultView = Namespace.declare("tla.EAM.layer3.WODAViews",
    class DefaultView extends UcpView {
        get panelName() {}

    }
);