import QtQuick 2.0
import QtQuick.XmlListModel 2.0

Item {
    property bool running: true
    property string filter: ""
    property alias countryModel: countryModel
    property alias source: xmlModel.source

    function addtomodel(){
        countryModel.clear()
        var cname
        var filt
        for(var i = 0; i < xmlModel.count; i++) {
            cname = getCountryName(xmlModel.get(i).name)
            if (cname) {filt = cname.toLowerCase(); if (filt.indexOf(filter) !== -1) countryModel.append({"name" : cname, "alpha_2" : xmlModel.get(i).name,"stationcount" : xmlModel.get(i).stationcount})}
        }
        countryModel.listModelSort(countryModel, compareElements)
        radioBrowser.countryCount = countryModel.count
        running = false
    }

    function compareElements(elem1, elem2) {
        return elem1.name.localeCompare(elem2.name)
    }

    ListModel {
        id: countryModel
        function listModelSort(listModel, compareFunc) {
            var indexes = new Array(listModel.count);
            for (var i = 0; i < listModel.count; i++) indexes[i] = i;
            indexes.sort(function (indexA, indexB) { return compareFunc(get(indexA), get(indexB)) } );
            var sorted = 0;
            while (sorted < indexes.length && sorted === indexes[sorted]) sorted++;
            if (sorted === indexes.length) return;
            for (i = sorted; i < indexes.length; i++) {
                var idx = indexes[i];
                listModel.move(idx, listModel.count - 1, 1);
                listModel.insert(idx, { } );
            }
            listModel.remove(sorted, indexes.length - sorted);
        }
    }

    XmlListModel {
            id: xmlModel
            query: "/result/countrycode"

            XmlRole { name: "name"; query: "@name/string()" }
            XmlRole { name: "stationcount"; query: "@stationcount/string()" }

            onStatusChanged: {
                if (status === XmlListModel.Ready) {
                    addtomodel()
                    running = false
                }
            }
        }

    onFilterChanged: addtomodel()
}

