#!/usr/bin/env python3

# SPDX-FileCopyrightText: Metadata Cleaner contributors
# SPDX-License-Identifier: GPL-3.0-or-later

"""Entry script for Metadata Cleaner."""

import gettext
import locale
import logging
import mimetypes
import os
import signal
import sys
from pathlib import Path

import gi

gi.require_version("Gdk", "4.0")
gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")


APP_ID = "io.gitlab.metadatacleaner.metadatacleaner"
DEVEL = "False" == "True"
VERSION = "4.0.0"
LOCALE_DIR = "/usr/share/locale"

sys.path.insert(1, "/usr/share/metadata-cleaner")
os.unsetenv("GTK_THEME")


def setup_i18n() -> None:
    """Set the text domain for translations."""
    try:
        locale.bindtextdomain(APP_ID, LOCALE_DIR)  # type: ignore
        locale.textdomain(APP_ID)  # type: ignore
    except AttributeError as e:
        logging.warning(
            f"Unable to set the gettext translation domain.\nError:\n{e}"
        )
    gettext.bindtextdomain(APP_ID, LOCALE_DIR)
    gettext.textdomain(APP_ID)


def setup_resources() -> None:
    """Load the application resources."""
    from gi.repository import Gio

    resource = Gio.Resource.load(
        str(Path("/usr/share/metadata-cleaner") / f"{APP_ID}.gresource")
    )
    Gio.Resource._register(resource)


def setup_mimetypes() -> None:
    """Add a mime.types file for the Flatpak runtime."""
    if Path("/.flatpak-info").exists():
        mimetypes.init(files=mimetypes.knownfiles + ["/app/share/mime.types"])


def run_app() -> int:
    """Run the application.

    Returns:
        int: Exit status
    """
    from metadatacleaner.app import MetadataCleaner

    app = MetadataCleaner(application_id=APP_ID, devel=DEVEL, version=VERSION)
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    return app.run(sys.argv)


if __name__ == "__main__":
    setup_i18n()
    setup_resources()
    setup_mimetypes()

    sys.exit(run_app())
