<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="import"  href="bower_components/iron-component-page/iron-component-page.html">
    <link rel="import"  href="bower_components/paper-drawer-panel/paper-drawer-panel.html">
    <link rel="import"  href="bower_components/paper-menu/paper-menu.html">
    <link rel="import"  href="bower_components/paper-item/paper-item.html">
    <link rel="import"  href="bower_components/paper-dropdown-menu/paper-dropdown-menu.html">
    <link rel="import"  href="bower_components/paper-icon-button/paper-icon-button.html">
    <link rel="import" href="bower_components/paper-styles/color.html">
    <link rel="import" href="bower_components/paper-input/paper-textarea.html">
    <link rel="import" href="bower_components/iron-flex-layout/iron-flex-layout.html">
    <link rel="import" href="bower_components/iron-ajax/iron-ajax.html">

    <link rel="import" href="controllets/items-slider-controllet/items-slider-controllet.html">
    <link rel="import" href="controllets/draggable-element-controllet/draggable-element-controllet.html">
    <link rel="import" href="controllets/treeview-controllet/treeview-controllet.html">
    <link rel="import" href="controllets/text-element-controllet/text-element-controllet.html">

    <script type="text/javascript" src="datalets/shared_js/jquery-1.11.2.min.js"></script>
    <script type="text/javascript" src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
    <script src="controllets/shared_js/perfect-scrollbar/js/min/perfect-scrollbar.jquery.min.js"></script>
    <script src="../DEEPCLIENT/js/deepClient.js"></script>
    <script type="text/javascript" src="docs/js/editarea_0_8_2/edit_area/edit_area_full.js"></script>

    <link rel="stylesheet" href="controllets/shared_js/perfect-scrollbar/css/perfect-scrollbar.min.css">
    <link rel="import" href="bower_components/paper-menu-button/paper-menu-button.html">
    <meta charset="UTF-8">


    <script type="text/javascript">
        selected_component_url = "";

        $(document).ready(function () {
            window.addEventListener("treeview-controllet_fileds-selected", DEEP._fieldsSelected, false);
            window.addEventListener("items-slider-controllet_item-selected", DEEP._dataletSelected, false);
            window.addEventListener("draggable-element-controllet_content-dragged", DEEP._fieldsMapped, false);
            window.addEventListener("text-element-controllet_content-changed", DEEP._textElementChanged, false);

            editAreaLoader.init({
                id : "sbiricuda"       // textarea id
                ,syntax: "html"          // syntax to be uses for highgliting
                ,start_highlight: true      // to display with highlight mode on start-up
                ,syntax: "html"
                ,replace_tab_by_spaces: 4,
                isEditable : false,
            });
        });
    </script>

    <style>
        .avatar
        {
            display: inline-block;
            height: 0.5em;
            width: 0.5em;
            border-radius: 50%;
            /*background: #3f51b5;*/
            color: white;
            line-height: 2em;
            font-size: 1.87em;
            text-align: center;
            margin-right: 5px;
        }

        #toolbar{
            background: #2196F3 ;
        }
        #logo{
            width: 56px;
            height: 56px;
            background-image: url("http://spod.routetopa.eu/ow_static/themes/rtpa_matter/images/logo.png");
            background-size: auto 41px;
            background-repeat: no-repeat;
            background-position: center center;

        }
        .area_container
        {
            overflow: hidden;
            margin : 0.8em;
            padding : 0.8em;
            border-width: 1em;
            border-radius: 0.125rem;
            box-shadow: 0.125em 0.125em 0.1125em 0.125em rgba(0, 0, 0, 0.25);
        }

        #visualization_slider_area
        {
            min-width: 566px;
            min-height: 200px;
            height: 175px;
        }
        .content-card {
            position: relative;
            float: left;
            margin: .2em;
            width: 14%;
            min-height: 100px;
            height: 40%;
            background: #fff;
            -moz-border-radius: 0.125rem;
            -webkit-border-radius: 0.125rem;
            border-radius: 0.125rem;
            box-shadow: 0 0.625em 0.5125em 0 rgba(0, 0, 0, 0.25);
            -webkit-box-shadow: 0 0.625em 0.5125em 0 rgba(0, 0, 0, 0.25);
            -moz-box-shadow: 0 0.625em 0.5125em 0 rgba(0, 0, 0, 0.25);
            padding: 1em;
        }

        .content-selected{
            position: relative;
            float: left;
            top : 5%;
            margin : .2em;
            width: 14%;
            height: 40%;

            background: #fff;
            border-style: solid;
            border-width: 0.03em;
            -moz-border-radius: 0.125rem;; /* Firefox */
            -webkit-border-radius: 0.125rem;; /* Safari, Chrome */
            border-radius: 0.125rem;
            box-shadow:         0 1.825em 1.7125em 0 rgba(0, 0, 0, 0.50);
            -webkit-box-shadow: 0 1.825em 1.7125em 0 rgba(0, 0, 0, 0.50);
            -moz-box-shadow:    0 1.825em 1.7125em 0 rgba(0, 0, 0, 0.50);
            padding: 1em;
        }

    </style>

</head>
<body unresolved>

<template id="DEEP" is="dom-bind">

    <iron-ajax
            auto
            id="data_request"
            url="http://ckan.routetopa.eu/api/action/datastore_search?resource_id=07843fc3-07e1-4c66-9be4-fed43ca4a26f"
            verbose="true"
            on-response="handleResponseData"
            debounce-duration="300">
    </iron-ajax>

    <iron-ajax
            id="datales_list_request"
            auto
            url={{datasetsList}}
            handle-as="json"
            on-response="handleResponseDatalets"
            debounce-duration="300">
    </iron-ajax>

    <iron-ajax
            id="selected_datalet_request"
            url={{deepUrl}}
            verbose="true"
            on-response="handleSelectedDatalet"
            debounce-duration="300">
    </iron-ajax>

    <paper-toolbar id="toolbar">
        <paper-menu-button>
            <paper-icon-button icon="menu" class="dropdown-trigger"></paper-icon-button>
            <paper-menu class="dropdown-content">
                <paper-item><a href="http://routetopa.eu/" target="_blank">ROUTE-TO PA European Project</a></paper-item>
                <paper-item><a href="docs/docs.html" target="_blank">DEEP Documentation</a></paper-item>
            </paper-menu>
        </paper-menu-button>
        <span class="title">DatalEts-Ecosystem Provider - Datalet Creator</span>
        <a href="http://routetopa.eu/" target="_blank"><paper-icon-button id="logo" ></paper-icon-button></a>
    </paper-toolbar>
    <div id="main_content">
        <div class="vertical justified layout" style="margin-top: 40px;">

            <div class="horizontal layout">
                <paper-textarea style="width: 80%;margin-top: 8px;" id="data_url" label="Dataset api data url" floatingLabel value="http://ckan.routetopa.eu/api/action/datastore_search?resource_id=07843fc3-07e1-4c66-9be4-fed43ca4a26f" on-change="_textElementChanged"></paper-textarea>
                <paper-dropdown-menu style="width: 20%;" id="datasets-sources" label="Example datasets">
                    <paper-menu class="dropdown-content">
                        <template is="dom-repeat" items="[[Datasets.names]]" as="dataset" index-as="i">
                            <paper-item id="[[i]]" on-tap="_datasourceSelected">[[dataset]]</paper-item>
                        </template>
                    </paper-menu>
                </paper-dropdown-menu>
            </div>

            <div class="horizontal layout">

                <div style="position:relative;width: 50%;min-height: 40vh;max-height: 40vh;" id="fields_placeholder" class="area_container flexchild" style="min-width:300px">
                    <treeview-controllet id="fields_treeview"></treeview-controllet>
                </div>

                <div style="position:relative;width: 50%;min-height: 40vh;max-height: 40vh;" id="table_fields_container" class="area_container flex2child">
                    <div id="table_component_place_holder"></div>
                </div>

            </div>

            <div class="horizontal layout">

                <div style="position:relative;width: 50%;min-height: 80vh;max-height: 80vh;" id="datalet_params_main_placeholder" class="area_container flexchild" style="min-width:300px">
                    <div class="">
                        <div id="visualization_slider_area" class="area_container"></div>
                        <div id="fields_mapping_area" class="area_container horizontal layout">

                            <div id="selected_fields_main_container" class="field-mapping-card" style="position:relative;width: 50%;min-height: 40vh;max-height: 40vh;">
                                <div class="title">
                                    <div class="medium">Selected fields</div>
                                </div>
                                <div id="selected_fields_container" class="area_container"></div>
                            </div>

                            <div id="idm_fields_main_container" class="field-mapping-card" style="position:relative;width: 50%;min-height: 40vh;max-height: 40vh;">
                                <div class="title">
                                    <div class="medium">Datalet fields</div>
                                </div>
                                <div id="datalet_idm_fields_container" class="area_container"></div>
                            </div>
                        </div>
                        <div id="idm_layout_main_container" class="area_container" style="position:relative;min-height: 20vh;max-height: 20vh;">
                            <div class="title">
                                <div class="medium">Layout fields</div>
                            </div>
                            <div id="idm_layout_container" class="area_container"></div>
                        </div>
                    </div>

                </div>

                <div style="position:relative;width: 50%;min-height: 80vh;max-height: 80vh;" id="datalet_main_container" class="area_container flex2child">
                </div>

            </div>

            <div class="horizontal layout">
                <div id="code_area" style="position:relative;width: 100%;min-height: 20vh;max-height: 20vh;" class="area_container flex2child">
                    <textarea id="sbiricuda" style="position:relative;width: 100%;min-height: 20vh;max-height: 20vh;" style="" rows="4" cols="50">
                       Copy and paste this code to inject the datalet in you page.
                    </textarea>
                </div>
            </div>

        </div>

    </div>
</template>
<script>
    DEEP.Datasets = {
        names:[
            'Italy - Consuntivo entrate 2009',
            'Italy - Consuntivo entrate 2010',
            'Italy - Consuntivo entrate 2011',
            'Italy - Consuntivo entrate 2012',
            'Italy - Consuntivo entrate 2014',
            'Holland - Vestigingen register gemeente Groningen',
            'Holland - Woonruimte gemeente Groningen',
            'Ireland - SDCC Traffic Cameras',
            'Ireland - Derelict Site Register',
            'Ireland - Dublin City Council Commencement Notices',
            'Ireland - Dublin City Council Planning Applications',
            'Ireland - Dun Laoghaire-Rathdown County Council Planning Application 2008-2014',
            'Ireland - Fingal Council Planning Applications for last 7 years',
            'Ireland - Planning Register',
            'Ireland - Fingal Development Plan 2011-2017 Record of Protected Structures'
        ],
        urls: [
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=07843fc3-07e1-4c66-9be4-fed43ca4a26f',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=48a4db73-d3d4-4639-bbc2-9c797d0e6cda',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=a14cc2fb-0c24-48d7-9370-834045797d89',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=fb32fcb6-5e44-4e52-b132-01c6540ddbee',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=0cb600fc-19ad-4aaf-9794-1e6ea851840a',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=ba554c1f-02a7-4d76-b449-fb9daa1f8bfd',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=af7b3916-4347-469a-8354-3c2d559bd92f',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=73e02092-85a1-434e-85fe-0c9a43aa9a52',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=fcbee83e-3d3d-4303-a568-24dd33d02adc',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=ee00de68-f2e4-482f-a003-3c0561351075',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=2f4a9d44-b52f-4c8b-a5db-d8f4a676d81e',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=c479f061-9638-489d-ac55-0c68765548ff',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=d29a477a-4734-43ef-8002-048c8640d441',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=2b23f32d-e27e-4eef-af1e-27e05103df7d',
            'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=5ea813bc-fdf9-4edb-b3b1-0142b593d5c6'
        ]
    };

    DEEP.deepUrl = "http://192.168.214.128/DatalEts-Ecosystem-Provider/DEEP/";
    DEEP.datasetsList = "http://192.168.214.128/DatalEts-Ecosystem-Provider/DEEP/datalets-list";

    DEEP.handleResponseData = function(e){
        DEEP.$.fields_treeview.init(e.detail.response);
        $("#fields_placeholder").perfectScrollbar();
        $("#table_fields_container").perfectScrollbar();
    };

    DEEP.handleResponseDatalets = function(e){
        DEEP.datalets_list = new Array();
        for(var i=0;i < e.detail.response.length;i++){
            var datalet_info = { name : e.detail.response[i].name ,
                image : e.detail.response[i].url + e.detail.response[i].name + ".png"
            };

            DEEP.datalets_list.push(datalet_info);
        }

        DEEP.$.visualization_slider_area.innerHTML = '<items-slider-controllet items=\'' + JSON.stringify(DEEP.datalets_list) + '\'' +
                '\'></items-slider-controllet>';
    };

    DEEP.handleSelectedDatalet = function(e){

        var response = e.detail.response;
        DEEP.$.datalet_idm_fields_container.innerHTML = "";
        DEEP.$.idm_layout_container.innerHTML = "";

        if(response.idm.inputs.input.constructor == Object) {
            var input = response.idm.inputs.input;
            if(input.selection == "*") {
                var input_selected_fields = Polymer.dom(DEEP.$.selected_fields_container).querySelectorAll('draggable-element-controllet');
                for (var j = 0; j < input_selected_fields.length; j++) {
                    DEEP.$.datalet_idm_fields_container.innerHTML += '<draggable-element-controllet is-target="true" heading="Field ' + (j + 1) + '"  description="' + input.description + '" number="' + (j + 1) + '"></draggable-element-controllet><br>';
                }
            }
        }else{
            for(var i =0; i < response.idm.inputs.input.length; i++){
                var input = response.idm.inputs.input[i];
                DEEP.$.datalet_idm_fields_container.innerHTML += '<draggable-element-controllet is-target="true" id="' + input.name + '" heading="' + input.name + '"  description="' + input.description + '" number="' + (i + 1) + '"></draggable-element-controllet><br>';
            }
        }

        if(response.idm.inputs.layouts.input.constructor == Object) {
            var input = response.idm.inputs.layouts.input;
            DEEP.$.idm_layout_container.innerHTML += '<text-element-controllet heading="' + input.name + '" description="' + input.description + '" number="1"></text-element-controllet>';
        }else{
            for(var i =0; i < response.idm.inputs.layouts.input.length; i++){
                var input = response.idm.inputs.layouts.input[i];
                DEEP.$.idm_layout_container.innerHTML += '<text-element-controllet heading="' + input.name + '" ' +
                        'description="' + input.description + '" ' +
                        'number="' + (i+1) + '">' +
                        '</text-element-controllet>';
            }
        }

        $("#selected_fields_main_container").perfectScrollbar();
        $("#idm_fields_main_container").perfectScrollbar();
        $("#idm_layout_main_container").perfectScrollbar();
        $("#datalet_params_main_placeholder").perfectScrollbar();
    };

    DEEP._urlChanged = function(event){
        DEEP.$.data_request.url = event.target.value;
        DEEP.$.data_request.generateRequest();
        DEEP.$.table_component_place_holder.innerHTML = "";
    };

    DEEP._datasourceSelected = function(event){
        DEEP.$.data_url.value = DEEP.Datasets.urls[parseInt(event.target.id)];
        DEEP.$.data_request.url = DEEP.Datasets.urls[parseInt(event.target.id)];
        DEEP.$.data_request.generateRequest();
        DEEP.$.table_component_place_holder.innerHTML = "";
    };

    DEEP._fieldsSelected  = function(e){

        DEEP.$.selected_fields_container.innerHTML = "";
        for(var i=0;i<e.detail.fields.length;i++) {
            DEEP.$.selected_fields_container.innerHTML += '<draggable-element-controllet identifier="' + e.detail.fields[i] +
                    '" label="' + e.detail.fields[i].split(",")[e.detail.fields[i].split(",").length -1] +
                    '"></draggable-element-controllet><br>';
        }

        ComponentService.deep_url = DEEP.deepUrl;

        ComponentService.getComponent({
            component   : "datatable-datalet",
            params      :{
                'data-url' : DEEP.$.data_url.value
            },
            fields      : e.detail.fields,
            placeHolder :  DEEP.$.table_component_place_holder
        });

    };

    DEEP._dataletSelected = function(e){
        DEEP.selected_datalet = e.detail.datalet;
        DEEP.$.selected_datalet_request.url = DEEP.deepUrl + e.detail.datalet;
        DEEP.$.selected_datalet_request.generateRequest();
    };

    DEEP._fieldsMapped = function(e){
        DEEP.generateDataletPreview();
    };

    DEEP.timer = 0;
    DEEP._textElementChanged = function(e){
        clearTimeout (DEEP.timer);
        DEEP.timer = setTimeout(DEEP.generateDataletPreview, 1500);
    };

    DEEP.getXMLHttpRequest =  function()
    {
        if (window.XMLHttpRequest) {
            return new XMLHttpRequest();
        }
        else {
            try {
                return new ActiveXObject("MSXML2.XMLHTTP.3.0");
            }
            catch(ex) {
                return null;
            }
        }
    };

    DEEP.generateDataletPreview = function(){

        var input_mapped_fields = Polymer.dom(DEEP.$.datalet_idm_fields_container).querySelectorAll('draggable-element-controllet[is-target=true]');
        DEEP.selected_fields = Array();

        for (var i = 0; i < input_mapped_fields.length; i++) {
            if (input_mapped_fields[i].value != "") {
                DEEP.selected_fields.push(input_mapped_fields[i].value);
            }
        }

        var input_layouts_fields = Polymer.dom(DEEP.$.idm_layout_container).querySelectorAll('text-element-controllet');
        DEEP.params_fields = {'data-url' : DEEP.$.data_url.value};

        for (var i = 0; i < input_layouts_fields.length; i++) {
            if (input_layouts_fields[i].value != "") {
                DEEP.params_fields[input_layouts_fields[i].heading]  =  input_layouts_fields[i].value;
            }
        }

        ComponentService.deep_url = DEEP.deepUrl;
        ComponentService.getComponent({
            component   : DEEP.selected_datalet,
            params      : DEEP.params_fields,
            fields      : DEEP.selected_fields,
            placeHolder : DEEP.$.datalet_main_container
        });

        var request = DEEP.getXMLHttpRequest();

        request.onreadystatechange = function(){
            if(request.readyState == 4){
                try {
                    var resp = JSON.parse(request.response);
                    var link = '<link rel="import" href="' + resp.bridge_link + resp.component_link +'">\n';

                    //Build datalet injecting html code
                    var datalet_code = link + '<' + DEEP.selected_datalet;
                    var keys = Object.keys(DEEP.params_fields);
                    for(var i = 0; i < keys.length; i++){
                        datalet_code += ' ' + keys[i] + '=\'' + DEEP.params_fields[keys[i]] +'\'';
                    }
                    datalet_code += " fields='" + JSON.stringify(DEEP.selected_fields) + "'></" + DEEP.selected_datalet + ">";

                    DEEP.$.code_area.innerHTML = '<textarea id="sbiricuda" style="position:relative;width: 100%;min-height: 20vh;max-height: 20vh;" style="" rows="4" cols="50" autofocus="false">' +
                            '<!-- ADD THE POLYFILL TO YOUR PAGE - https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/0.7.14/webcomponents.min.js -->\n' + datalet_code +
                            '</textarea>';

                    editAreaLoader.init({
                        id : "sbiricuda"       // textarea id
                        ,syntax: "html"          // syntax to be uses for highgliting
                        ,start_highlight: true      // to display with highlight mode on start-up
                        ,syntax: "html"
                        ,replace_tab_by_spaces: 4,
                        isEditable : false,
                    });

                } catch (e){
                    var resp = {
                        status: 'error',
                        data: 'Unknown error occurred: [' + request.response + ']'
                    };
                }
            }};

        request.open('GET', DEEP.deepUrl + DEEP.selected_datalet);
        request.send();

    };

</script>

</body>
</html>