import textwrap
import sys

from typing import Self
from dzgui.util.strings import dialog_error, dialog_header

import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk  # noqa E402


class EarlyAlertDialog(Gtk.MessageDialog):
    def __init__(self, string: str) -> None:
        super().__init__(
            title=dialog_header,
            text=dialog_error,
            transient_for=None,
            buttons=Gtk.ButtonsType.OK,
        )

        msg = textwrap.fill(string, 50)
        self.format_secondary_text(msg)

        aa = self.get_action_area()
        aa.set_margin_bottom(20)
        # self.action_area.set_margin_bottom(20)
        self.outer = self.get_content_area()
        self.outer.set_margin_start(30)
        self.outer.set_margin_end(30)

        self.set_default_size(250, 100)

        abort = self.get_widget_for_response(Gtk.ResponseType.OK)
        if abort is not None and hasattr(abort, "set_label"):
            abort.set_label("Exit")

        self.connect("response", self._on_response)
        self.run()
        self.destroy()

    def _on_response(self, dialog: Self, response: Gtk.ResponseType) -> None:
        match response:
            case Gtk.ResponseType.OK:
                sys.exit(1)
            case Gtk.ResponseType.CANCEL:
                return


class EarlyIgnoreDialog(EarlyAlertDialog):
    def __init__(self, string: str) -> None:
        super().__init__(string=string)

        # TODO: reverse order
        self.add_button("Ignore", Gtk.ResponseType.CANCEL)
