Smugglers Cove Visit Counter

Counts how many times you've visited the Smugglers Cove on GC, and displays the count under the banner, informing you about the number of tries you have left.

// ==UserScript==
// @name         Smugglers Cove Visit Counter
// @namespace    https://www.grundos.cafe
// @version      1.1
// @description  Counts how many times you've visited the Smugglers Cove on GC, and displays the count under the banner, informing you about the number of tries you have left.
// @author       Dark_Kyuubi
// @match        https://www.grundos.cafe/pirates/smugglerscove/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=grundos.cafe
// @grant        GM.getValue
// @grant        GM.setValue
// @require      https://cdn.jsdelivr.net/npm/[email protected]/build/global/luxon.min.js
// @license      MIT
// ==/UserScript==

(async function () {
    'use strict';

    const COVE_VISIT_STORAGE = 'smugglers_cove_visits';
    const COVE_RESET_TIME_STORAGE = 'smugglers_cove_next_reset';
    const { DateTime } = luxon;
    const MAX_VISITS = 6;

    function getNextMidnightNST() {
        const nowLA = DateTime.now().setZone('America/Los_Angeles');
        return nowLA.plus({ days: 1 }).startOf('day').toMillis();
    }

    let nextResetStorage = await GM.getValue(COVE_RESET_TIME_STORAGE);
    if (!nextResetStorage) {
        nextResetStorage = getNextMidnightNST();
        await GM.setValue(COVE_RESET_TIME_STORAGE, nextResetStorage);
    }
    else if (Date.now() > nextResetStorage) {
        await GM.setValue(COVE_VISIT_STORAGE, 0);
        nextResetStorage = getNextMidnightNST();
        await GM.setValue(COVE_RESET_TIME_STORAGE, nextResetStorage);
    }

    let visits = await GM.getValue(COVE_VISIT_STORAGE, 0);
    visits++;
    await GM.setValue(COVE_VISIT_STORAGE, visits);

    const counterDiv = document.createElement('div');
    counterDiv.classList.add('smugglers-cove-visit-counter', 'center', 'red');
    counterDiv.style.fontSize = '18px';
    counterDiv.style.fontWeight = 'bold';
    const displayVisits = visits > MAX_VISITS ? 'too many' : visits;
    counterDiv.textContent = `You have visited the Smugglers Cove ${displayVisits} time${visits === 1 ? '' : 's'} today. ${MAX_VISITS - visits >= 0 ? `You have ${MAX_VISITS - visits} visit${MAX_VISITS - visits === 1 ? '' : 's'} left.` : "You've used all your visits for today!"}`;
    document.getElementById('page_content').prepend(counterDiv);
})();