/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

var platform_type = "";

var platform_theme = "md";

var app_version = "unknown";

var nw_tray = null;

/**
 * If true and animations are set to "auto", animations should be disabled.
 * @type Boolean
 */
var auto_disable_animations = false;

var cordovaInAppBrowserRef = null;

var openBrowser = function (url) {
    window.open(url);
}

var closeBrowser = function () {
    // stub
}

var openExternalBrowser = function (url) {
    window.open(url);
}

var doHapticFeedback = function () {
    console.log("Haptics not enabled.");
}

var appTheme = "light";

var getLocation = function (success, error) {
    if ("geolocation" in navigator) {
        navigator.geolocation.getCurrentPosition(function (position) {
            success(position);
        }, function (err) {
            if (typeof error == "function") {
                error(err.message);
            }
        }, {
            enableHighAccuracy: true,
            timeout: 5000,
            maximumAge: 0
        });
    } else {
        if (typeof error == "function") {
            error("Location is unavailable.");
        }
    }
}


function initCordova() {
    platform_type = "cordova";

    // Handle back button to close things
    document.addEventListener("backbutton", handleBackButton, false);
    document.addEventListener("deviceready", function () {
        // Make sure the status bar color is set properly
        applyColorTheme();

        if (typeof device != "undefined" && device.platform == "Android") {
            doHapticFeedback = function () {
                window.plugins.deviceFeedback.acoustic();
            }
        }

        cordova.plugins.ThemeDetection.isAvailable(function (resp) {
            if (resp.value == true) {
                cordova.plugins.ThemeDetection.isDarkModeEnabled(function (resp) {
                    if (resp.value == true) {
                        appTheme = "dark";
                    } else {
                        appTheme = "light";
                    }
                    applyColorTheme();
                }, function (err) {});
            }
        }, function (err) {});

        window.htmlopen = window.open;
        window.open = cordova.InAppBrowser.open;

        openBrowser = function (url, options, onclose, onmessage) {
            if (typeof options == "undefined") {
                options = "location=yes";
            }
            cordovaInAppBrowserRef = cordova.InAppBrowser.open(url, "_blank", options);
            if (typeof onclose == "function") {
                try {
                    cordovaInAppBrowserRef.removeEventListener("exit");
                } catch (ex) {
                }
                cordovaInAppBrowserRef.addEventListener("exit", onclose);
            }
            if (typeof onmessage == "function") {
                try {
                    cordovaInAppBrowserRef.removeEventListener("message");
                } catch (ex) {
                }
                cordovaInAppBrowserRef.addEventListener("message", onmessage);
            }
        }

        closeBrowser = function () {
            if (typeof cordovaInAppBrowserRef != null) {
                cordovaInAppBrowserRef.close();
            }
        }

        openExternalBrowser = function (url) {
            window.open(url, '_system', '');
        }

        IonicDeeplink.onDeepLink(function (link) {
            if (link.host != "fixphrase.com") {
                return;
            }
            // Wait a bit so the home page has time to load first.
            setTimeout(function () {
                if (link.fragment) {
                    var hash = link.fragment;
                    if (/^-?[0-9]{1,2}\.?[0-9]*,-?[0-9]{1,3}\.?[0-9]*$/.test(hash)) {
                        var lat = hash.split(",")[0];
                        var lon = hash.split(",")[1];
                        lat = (Math.round(lat * 10000) / 10000);
                        lon = (Math.round(lon * 10000) / 10000);
                        lookupAndShowCoords(lat, lon);
                    } else if (/^[a-z]+\-[a-z]+\-?[a-z]+?\-?[a-z]+?$/.test(hash)) {
                        var words = hash.replaceAll("-", " ");
                        dolookup(words);
                        $("#wordbox").val(words);
                    } else if (/^[a-z]+\ [a-z]+\ ?[a-z]+?\ ?[a-z]+?$/.test(decodeURI(hash))) {
                        var words = decodeURI(hash);
                        dolookup(words);
                    }
                }
            }, 1000);
        });
    }, false);

    // Handle geo: urls
    $("body").on("click", "a[href^='geo:']", function (evt) {
        if (cordova.platformId == "ios") {
            window.open($(this).attr("href").replace("geo:", "http://maps.apple.com/?q="), "_system");
        } else if (cordova.platformId == "android") {
            window.open($(this).attr("href").replace("geo:", "geo:0,0?q="), "_system");
        } else {
            window.open($(this).attr("href"), "_system");
        }
        evt.preventDefault();
    });
}

function initNW() {
    platform_type = "nw";
    platform_theme = "md";
    openBrowser = function (url) {
        nw.Window.open(url, {
            id: url
        }, function (browserwin) {
            // Add menubar so the user can navigate around if they click a link
            var browsermenu = new nw.Menu({type: 'menubar'});
            browsermenu.append(new nw.MenuItem({
                label: "Back",
                click: function () {
                    browserwin.window.history.back();
                }
            }));
            browsermenu.append(new nw.MenuItem({
                label: "Forward",
                click: function () {
                    browserwin.window.history.forward();
                }
            }));
            browsermenu.append(new nw.MenuItem({
                label: "Home",
                click: function () {
                    browserwin.window.location.href = url;
                }
            }));
            browserwin.menu = browsermenu;
        });
    }

    openExternalBrowser = function (url) {
        require('nw.gui').Shell.openExternal(url);
    }

    // Handle geo: urls
    $("body").on("click", "a[href^='geo:']", function (evt) {
        require('nw.gui').Shell.openExternal($(this).attr("href"));
        evt.preventDefault();
    });

    // automatic theme, default light
    if (typeof Framework7.device.prefersColorScheme() !== 'undefined' && Framework7.device.prefersColorScheme() == "dark") {
        appTheme = "dark";
    } else {
        appTheme = "light";
    }
    applyColorTheme();
}

function initBrowser() {
    platform_type = "browser";
    platform_theme = "md";
    openBrowser = function (url) {
        window.open(url);
    }

    openExternalBrowser = function (url) {
        window.open(url);
    }

    $("body").on("click", ".geolink", function (evt) {
        window.open($(this).attr("href"), "_blank");
        evt.preventDefault();
    });

    // automatic theme, default light
    if (typeof Framework7.device.prefersColorScheme() !== 'undefined' && Framework7.device.prefersColorScheme() == "dark") {
        appTheme = "dark";
    } else {
        appTheme = "light";
    }
    applyColorTheme();
}

function initPlatform() {
    if (typeof cordova !== 'undefined') {
        initCordova();
    } else if (typeof nw !== 'undefined') {
        initNW();
    } else {
        initBrowser();
    }

    $.getJSON("package.json", function (data) {
        app_version = data.version;
    });
}