<% /*
    $Revision$
    $Id$

    File            lfmap.inc
    Description:    Toon een rapport als kaart/plattegrond
    Note:           Globale variabele 'rapport' is al gezet
*/

function fac_usrrap_list_map(model, scf_params)
{
    var coltitle = getQParam("coltitle", "title");
    if (!(coltitle in rapport.fields))
    {
        coltitle = scf_params.list.columns[0]; // eerste kolom
    }
    var colwaarde = getQParam("colwaarde", "waarde");
    if (!(colwaarde in rapport.fields))
    {
        colwaarde = scf_params.list.columns[1]; // Tweede kolom
    }
    var colurl = getQParam("colurl", null);

    var transit = "";
    if ("transit" in scf_params)
        transit = "&" + scf_params.transit.name + "=" + safe.url(scf_params.transit.val);

    var xxx_params = { filter : scf_params.filter || shared.qs2json(model),
                       columns: scf_params.list.columns,
                       groupby: scf_params.list.groupby,
                       urllink: scf_params.urllink };

    xxx_params.filter.showall = 1;

    if (!("coordx" in rapport.fields))
    {   // eerst template toevoegen
        rapport.fields["coordx"] =
            {
                "dbs": "coordx",
                "label": "Coordx",
                "orglabel": "Coordx",
                "fixedlabel": false,
                "manual": false,
                "sql": " komt zo ",
                "typ": "float",
                "orgtyp": "float",
                "group": {
                    "id": "G",
                    "name": "N.v.t."
                },
                "sorting": {
                    "id": 3,
                    "name": "Automatisch"
                },
                "visible": "I"
            };
        rapport.fields["coordy"] =
            {
                "dbs": "coordy",
                "label": "Coordy",
                "orglabel": "Coordy",
                "fixedlabel": false,
                "manual": false,
                "sql": " komt zo ",
                "typ": "float",
                "orgtyp": "float",
                "group": {
                    "id": "G",
                    "name": "N.v.t."
                },
                "sorting": {
                    "id": 3,
                    "name": "Automatisch"
                },
                "visible": "I"
            };

        // Voor alg_gebouw_key en alg_locatie_key doen we al wat auto-magie
        // de versie zonder alg_ ervoor komt uit de udr
        if ("gebouw_key" in rapport.fields ||
            "alg_gebouw_key" in rapport.fields ||
            "fclt_3d_gebouw_key" in rapport.fields)
        {
            if ("fclt_3d_gebouw_key" in rapport.fields)
                var gebkeyfld = "fclt_3d_gebouw_key";
            else if ("alg_gebouw_key" in rapport.fields)
                gebkeyfld = "alg_gebouw_key";
            else
                gebkeyfld = "gebouw_key";
            var gebkeyfield = rapport.table + "." + gebkeyfld;
        }

        if ("locatie_key" in rapport.fields ||
            "alg_locatie_key" in rapport.fields ||
            "fclt_3d_locatie_key" in rapport.fields)
        {
            if ("fclt_3d_locatie_key" in rapport.fields)
                var lockeyfld = "fclt_3d_locatie_key";
            else if ("alg_locatie_key" in rapport.fields)
                lockeyfld = "alg_locatie_key";
            else
                lockeyfld = "locatie_key";
            var lockeyfield = rapport.table + "." + lockeyfld;
        }

        gebsqlx = gebsqly = locsqlx = locsqly = "(SELECT NULL FROM DUAL)"
        if (gebkeyfield)
        {
            var gebsqlx = "(SELECT COALESCE(alg_gebouw_x, alg_locatie_x)"
                                + "   FROM alg_gebouw g"
                                + "      , alg_locatie l"
                                + "  WHERE g.alg_gebouw_key(+) = " + gebkeyfield
                                + "    AND g.alg_locatie_key = l.alg_locatie_key)";
            var gebsqly = "(SELECT COALESCE(alg_gebouw_y, alg_locatie_y)"
                                + "   FROM alg_gebouw g"
                                + "      , alg_locatie l"
                                + "  WHERE g.alg_gebouw_key(+) = " + gebkeyfield
                                + "    AND g.alg_locatie_key = l.alg_locatie_key)";
        }
        if (lockeyfield)
        {
            var locsqlx = "(SELECT alg_locatie_x"
                                + "   FROM alg_locatie l"
                                + "  WHERE l.alg_locatie_key = " + lockeyfield + ")";
            var locsqly = "(SELECT alg_locatie_y"
                                + "   FROM alg_locatie l"
                                + "  WHERE l.alg_locatie_key = " + lockeyfield + ")";
        }
        if (!(gebkeyfield || lockeyfield))
            shared.internal_error( "No suitable coordinate fields found in report");

        rapport.fields["coordx"].sql = "COALESCE("+gebsqlx+", "+locsqlx+")";
        rapport.fields["coordy"].sql = "COALESCE("+gebsqly+", "+locsqly+")";
    }
    if (!inArray("coordx", xxx_params.columns))
    {
        xxx_params.columns.push("coordx");
        xxx_params.columns.push("coordy");
        if (gebkeyfld)
        {
            xxx_params.columns.push(gebkeyfld); // waarom krijg ik 'Geen GROUP BY-uitdrukking.' als ik deze vooraan zet?
            xxx_params.groupby.push(gebkeyfld);
        }
        if (lockeyfld)
        {
            xxx_params.columns.push(lockeyfld); // waarom krijg ik 'Geen GROUP BY-uitdrukking.' als ik deze vooraan zet?
            xxx_params.groupby.push(lockeyfld);
        }
        xxx_params.groupby.push("");
        xxx_params.groupby.push("");
    }

    var rap_data = rapport.REST_GET(xxx_params);
    var result = [];
    var markerwaardemin = -1;
    var markerwaardemax = -1;
    var fixedradius = false;
    var avgmarkerradius = 20;  // straal in px voor standaard (fixed) of middelste (dynamisch) waarde
    for (var i = 0; i < rap_data.length; i++)
    {
        var data = rap_data[i];
        if (data.coordx === null || data.coordy === null)
            continue;

        // Gekopieerd maar niet nodig?
        //var fclturl = null;
        //if (colurl)
        //{
        //    fclturl = data[colurl];
        //}
        //else if (rapport.list.default_url)
        //{
        //    fclturl = rapport.list.default_url + data.id;
        //}

        // Waarde-range bepalen
        if (data[colwaarde] < markerwaardemin || markerwaardemin == -1)
            markerwaardemin = data[colwaarde];
        if (data[colwaarde] > markerwaardemax || markerwaardemax == -1)
            markerwaardemax = data[colwaarde];

        // color is:
        // the color as defined in the color column, else
        // the color defined by waarde in relation to the limit0..limit3 definitions, else
        // no color, i.e. the default
        var markercolor = data.color;
        if (!data.color && data[colwaarde] && rapport.limit1 && rapport.limit2)
        {
            var descending = (rapport.limit1 > rapport.limit2);
            if (data[colwaarde]) // EN numeriek
            {
                if (descending)
                {
                    markercolor = (data[colwaarde] > rapport.limit1 ? "red" :
                                (data[colwaarde] > rapport.limit2 ? "orange" : "green"))
                }
                else
                {
                    markercolor = (data[colwaarde] > rapport.limit2 ? "green" :
                                (data[colwaarde] > rapport.limit1 ? "orange" : "red"))
                }
            }
        }
        if (markercolor) fixedradius = true;  // ik vind en kleuren en omvang dubbelop en onzin

        result.push({ title:     data[coltitle],
                      loc:       [data.coordx, data.coordy],
                      id:        data.id,
                      fclturl:   (rapport.list.default_url && data.id)?rapport.list.default_url.format(data.id):null,
                      waarde:    data[colwaarde],
                      color:     markercolor,
                      textColor: data.textcolor
                    });
    }
    var markerwaarderange = (markerwaardemax - markerwaardemin).toFixed(0);

%>
<html>
<head>
    <%  FCLTHeader.Generate(); %>
 <style>
    body {
        padding: 0;
        margin: 0;
    }
    geenhekjeaanbeginregel, #mapid {
        height: 100%;
        width: 100vw;
    }

    .datatext {
        text-align: center;
        padding: 2px 1px 0 1px;
        font-size: 12px;
        min-width: 24px;
        min-height: 24px;
        border-radius: 12px;
    }
</style>

</head>
<body>
    <div id="mapid" style='height: 500px;'></div>
 <script>

var llhome = [52.155172, 5.387201]; //Onze Lieve Vrouwetoren (Amersfoort)

// werkt nog niet goed/wordt niet aangeroepen
function resizeIframes()
{
    var height = parseInt(document.documentElement.clientHeight);
    alert(height);
    //alert($('#mapid').height());
    height = 600;
    $('#mapid').height(height);
    alert($('#mapid').height());
}

$(function ()
{
    var map = L.map('mapid', { preferCanvas: true, zoomControl: false }).setView(llhome, 8);

    var opentileurl = '<%=S("fac_lfmap_tileprovider")%>'; // https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
    // var opentileurl = 'lfosmproxy.asp?z={z}&x={x}&y={y}'; // te veel gedoe vooralsnog

    var maposm = L.tileLayer(opentileurl, {
		maxZoom: 18,
		attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' +
			'<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
		id: 'maposm',
		tileSize: 256,
		zoomOffset: 0
	}).addTo(map);

    var xxxxdata = <%= JSON.stringify(result, null, "   ") %>;

    var l = new L.FeatureGroup();
    map.addLayer(l);
    for (var i = 0; i < xxxxdata.length; i++)
    {
        var data = xxxxdata[i]
        //https://stackoverflow.com/questions/48872298/
        var markerOpts = L.Util.extend( {radius: <%=fixedradius ? avgmarkerradius : avgmarkerradius/2+"+(data.waarde-("+markerwaardemin+"))*"+avgmarkerradius+"/"+markerwaarderange %>, xxcolor:"#ff4455" }, data );
        var marker = L.circleMarker(data.loc, markerOpts);
        l.addLayer(marker);

        if (data.waarde)
        {
            var text = L.tooltip({
                    permanent: true,
                    direction: 'center',
                    className: 'datatext'
                })
                .setContent(String(data.waarde) || "??")
                .setLatLng(data.loc)
                .addTo(l);
        }

        if (data.title) // wordt niet rechtstreeks door circleMarker ondersteund
        {
            var text2 = L.tooltip({
                direction: 'top',
                className: 'text2'
                })
                .setContent(data.title)
                .setLatLng(data.loc);
            marker.bindTooltip(text2);
        }
    }

    l.on("click", function (event) {
//resizeIframes();
//return;
//console.log(event);
        var clickedMarker = event.layer;
        if (clickedMarker.options.fclturl)
            FcltMgr.openDetail(clickedMarker.options.fclturl);
    });
    //var height = parseInt(parent.document.documentElement.clientHeight);
    //alert(height);
    //$('#mapid').height($(window).height());
    map.fitBounds(l.getBounds(), { padding: [20, 20] });
});
 </script>
</body>
<%}
%>