import {Utils} from "../Utils";

export default class Constants {

    public static vNumber = "0.14.1";
    public static ImgurApiKey = '7070e7167f0a25a'
    public static readonly mapillary_client_token_v4 = "MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85"

    public static defaultOverpassUrls = [
        // The official instance, 10000 queries per day per project allowed
        "https://overpass-api.de/api/interpreter",
        // 'Fair usage'
        "https://overpass.kumi.systems/api/interpreter",
        // Offline: "https://overpass.nchc.org.tw/api/interpreter",
        "https://overpass.openstreetmap.ru/cgi/interpreter",
        // Doesn't support nwr: "https://overpass.openstreetmap.fr/api/interpreter"
    ]


    public static readonly added_by_default: string[] = ["gps_location", "gps_location_history", "home_location", "gps_track"]
    public static readonly no_include: string[] = ["conflation", "left_right_style", "split_point","current_view","matchpoint"]
    /**
     * Layer IDs of layers which have special properties through built-in hooks
     */
    public static readonly priviliged_layers: string[] = [...Constants.added_by_default, "type_node", "note", ...Constants.no_include]

 
    // The user journey states thresholds when a new feature gets unlocked
    public static userJourney = {
        moreScreenUnlock: 1,
        personalLayoutUnlock: 5,
        historyLinkVisible: 10,
        deletePointsOfOthersUnlock: 20,
        tagsVisibleAt: 25,
        tagsVisibleAndWikiLinked: 30,

        mapCompleteHelpUnlock: 50,
        themeGeneratorReadOnlyUnlock: 50,
        themeGeneratorFullUnlock: 500,
        addNewPointWithUnreadMessagesUnlock: 500,
        minZoomLevelToAddNewPoints: (Constants.isRetina() ? 18 : 19),

    };
    /**
     * Used by 'PendingChangesUploader', which waits this amount of seconds to upload changes.
     * (Note that pendingChanges might upload sooner if the popup is closed or similar)
     */
    static updateTimeoutSec: number = 30;
    /**
     * If the contributor has their GPS location enabled and makes a change,
     * the points visited less then `nearbyVisitTime`-seconds ago will be inspected.
     * The point closest to the changed feature will be considered and this distance will be tracked.
     * ALl these distances are used to calculate a nearby-score
     */
    static nearbyVisitTime: number= 30 * 60;
    /**
     * If a user makes a change, the distance to the changed object is calculated.
     * If a user makes multiple changes, all these distances are put into multiple bins, depending on this distance.
     * For every bin, the totals are uploaded as metadata
     */
    static distanceToChangeObjectBins = [25,50,100,500,1000,5000, Number.MAX_VALUE]
    static themeOrder = ["personal", "cyclofix", "hailhydrant", "bookcases", "toilets", "aed"];

    private static isRetina(): boolean {
        if (Utils.runningFromConsole) {
            return;
        }
        // The cause for this line of code: https://github.com/pietervdvn/MapComplete/issues/115
        // See https://stackoverflow.com/questions/19689715/what-is-the-best-way-to-detect-retina-support-on-a-device-using-javascript
        return ((window.matchMedia && (window.matchMedia('only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx), only screen and (min-resolution: 75.6dpcm)').matches || window.matchMedia('only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2)').matches)) || (window.devicePixelRatio && window.devicePixelRatio >= 2));
    }

}
