// ==SE_module==
// name: custom_reminders
// displayName: Custom Reminders with Custom Messages
// description: A Script that shows custom reminders with countdowns based on specified dates.
// version: 1.0
// author: Suryadip Sarkar
// ==/SE_module==

var networking = require("networking");
var messaging = require("messaging");
var config = require("config");
var im = require("interface-manager");
var ipc = require("ipc");
var javaInterfaces = require("java-interfaces");
var hooker = require("hooker");
var events = require("events");

var settingsContext = {
    events: [],
};


function displayCustomToast() {
    const customMessage = String(config.get("customMessage", ""));
    const countdownDate = String(config.get("countdownDate", ""));
    
    if (customMessage && countdownDate) {
        const { daysUntil } = getDaysUntil(countdownDate);
        if (daysUntil !== null) {
            var eventPhrase = getEventPhrase(daysUntil);
            var message = `${customMessage} ${daysUntil} days ${eventPhrase}!`;
            longToast(message);
        } else {
            longToast("Invalid countdown date. Please check your settings.");
        }
    } else {
        longToast("Please set both custom message and countdown date in settings.");
    }
}


function getEventPhrase(days) {
    if (days <= 7) {
        return "until the big day";
    } else if (days <= 30) {
        return "and counting";
    } else if (days <= 90) {
        return "until the excitement begins";
    } else {
        return "until the adventure unfolds";
    }
}


function getDaysUntil(dateString) {
    try {
        var [day, month, year] = dateString.split('/').map(Number);
        var now = new Date();
        var targetDate = new Date(year, month - 1, day);
        
        if (isNaN(targetDate.getTime())) {
            return { daysUntil: null };
        }
        
        var timeDiff = targetDate.getTime() - now.getTime();
        var daysUntil = Math.ceil(timeDiff / (1000 * 3600 * 24));
        return { daysUntil };
    } catch (error) {
        console.error("Error calculating days until:", error);
        return { daysUntil: null };
    }
}


function createManagerToolBoxUI() {
    settingsContext.events.push({
        start: function (builder) {
            builder.row(function (builder) {
                builder.textInput("Enter Custom Message", config.get("customMessage", ""), function (value) {
                    config.set("customMessage", value.trim(), true);
                }).maxLines(1)
                  .singleLine(true);
            });

            builder.row(function (builder) {
                builder.textInput("Enter Countdown Date (dd/mm/yyyy)", config.get("countdownDate", ""), function (value) {
                    config.set("countdownDate", value.trim(), true);
                }).maxLines(1)
                  .singleLine(true);
            });

            
            builder.row(function (builder) {
                builder.button("Test Custom Reminder", function () {
                    displayCustomToast();
                });
            });
        },
    });
}


module.onSnapMainActivityCreate = activity => {
    displayCustomToast();
};


function createInterface() {
    createManagerToolBoxUI();
}


function start(_) {
    createInterface();
}

start();


im.create("settings" /* EnumUI.SETTINGS */, function (builder, args) {
    settingsContext.events.forEach(function (event) {
        event.start(builder, args);
    });
});