// Copyright 2024, Command Line Inc.
// SPDX-License-Identifier: Apache-2.0

import { atoms, isDev, pushNotification } from "@/store/global";
import { useAtomValue } from "jotai";
import { useEffect } from "react";

export const useUpdateNotifier = () => {
    const appUpdateStatus = useAtomValue(atoms.updaterStatusAtom);

    useEffect(() => {
        let notification: NotificationType | null = null;

        switch (appUpdateStatus) {
            case "ready":
                notification = {
                    id: "update-notification",
                    icon: "arrows-rotate",
                    title: "Update Available",
                    message: "A new update is available and ready to be installed.",
                    timestamp: new Date().toLocaleString(),
                    type: "update",
                    actions: [
                        {
                            label: "Install Now",
                            actionKey: "installUpdate",
                            color: "green",
                            disabled: false,
                        },
                    ],
                };
                break;

            case "downloading":
                notification = {
                    id: "update-notification",
                    icon: "arrows-rotate",
                    title: "Downloading Update",
                    message: "The update is currently being downloaded.",
                    timestamp: new Date().toLocaleString(),
                    type: "update",
                    actions: [
                        {
                            label: "Downloading...",
                            actionKey: "",
                            color: "green",
                            disabled: true,
                        },
                    ],
                };
                break;

            case "installing":
                notification = {
                    id: "update-notification",
                    icon: "arrows-rotate",
                    title: "Installing Update",
                    message: "The update is currently being installed.",
                    timestamp: new Date().toLocaleString(),
                    type: "update",
                    actions: [
                        {
                            label: "Installing...",
                            actionKey: "",
                            color: "green",
                            disabled: true,
                        },
                    ],
                };
                break;

            case "error":
                notification = {
                    id: "update-notification",
                    icon: "circle-exclamation",
                    title: "Update Error",
                    message: "An error occurred during the update process.",
                    timestamp: new Date().toLocaleString(),
                    type: "update",
                    actions: [
                        {
                            label: "Retry Update",
                            actionKey: "retryUpdate",
                            color: "green",
                            disabled: false,
                        },
                    ],
                };
                break;
        }

        if (!isDev()) return;

        if (notification) {
            pushNotification(notification);
        }
    }, [appUpdateStatus]);
};
