#!/usr/bin/python3
"""wayfire-config NIVEAU — écrit sur la sortie standard les réglages de Wayfire
(compositeur avec animations) pour le niveau d'effets « modere » ou « complet ».

Référence des options : /usr/share/wayfire/metadata/*.xml
"""
import sys

niveau = sys.argv[1] if len(sys.argv) > 1 else "complet"
complet = niveau == "complet"

# Clavier du système (choisi dans l'installateur)
clavier = {"XKBLAYOUT": "fr", "XKBVARIANT": "", "XKBMODEL": "", "XKBOPTIONS": ""}
try:
    for ligne in open("/etc/default/keyboard", encoding="utf-8"):
        if "=" in ligne and not ligne.lstrip().startswith("#"):
            cle, val = ligne.strip().split("=", 1)
            clavier[cle] = val.strip('"')
except OSError:
    pass

greffons = [
    # « place » avant « window-rules » : les règles ont le dernier mot sur la position
    "autostart", "command", "place", "window-rules", "move", "resize", "grid",
    "wm-actions", "decoration", "animate", "foreign-toplevel", "gtk-shell",
    "xdg-activation", "shortcuts-inhibit", "wayfire-shell", "idle",
]
if complet:
    greffons += ["wobbly", "winshadows", "blur", "scale", "switcher", "zoom"]
else:
    greffons += ["fast-switcher"]

BLEU_NUIT = "#0b2447ff"
sections = {
    "core": {
        "plugins": " ".join(greffons),
        "vwidth": 1, "vheight": 1,
        "preferred_decoration_mode": "server",
        "xwayland": "true",
        "close_top_view": "<alt> KEY_F4",
        "background_color": "0.043 0.141 0.278 1.0",
        "exit": "none",
    },
    "input": {
        "xkb_layout": clavier["XKBLAYOUT"], "xkb_variant": clavier["XKBVARIANT"],
        "xkb_model": clavier["XKBMODEL"], "xkb_options": clavier["XKBOPTIONS"],
        "kb_numlock_default_state": "true",
        "cursor_theme": "Adwaita", "cursor_size": 24,
        "tap_to_click": "true", "natural_scroll": "false",
    },
    "autostart": {
        "autostart_wf_shell": "false",
        "p2i": "/usr/libexec/p2i/session-demarrage",
    },
    "command": {
        "binding_menu": "<super> KEY_SPACE", "command_menu": "p2i-menu",
        "binding_menu2": "<super>", "command_menu2": "p2i-menu",
        "binding_terminal": "<ctrl> <alt> KEY_T", "command_terminal": "p2i-terminal",
        "binding_fichiers": "<super> KEY_E", "command_fichiers": "p2i-fichiers",
        "binding_capture": "KEY_SYSRQ", "command_capture": "p2i-capture --ecran",
        "binding_capture2": "<shift> KEY_SYSRQ", "command_capture2": "p2i-capture --zone",
        "binding_verrou": "<super> KEY_L", "command_verrou": "/usr/libexec/p2i/verrouiller",
        "binding_moniteur": "<ctrl> <shift> KEY_ESC", "command_moniteur": "p2i-moniteur",
        "binding_reglages": "<super> KEY_I", "command_reglages": "p2i-reglages",
        "binding_vol_plus": "KEY_VOLUMEUP", "command_vol_plus": "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+",
        "binding_vol_moins": "KEY_VOLUMEDOWN", "command_vol_moins": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-",
        "binding_muet": "KEY_MUTE", "command_muet": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
    },
    "decoration": {
        # La taille du titre est fixée par Wayfire d'après la hauteur de la barre
        # (80 %) : « P2i Titres » est une Noto Sans réduite (voir
        # /etc/fonts/conf.d/60-p2i-titres.conf) qui lui rend une taille normale.
        # Barre claire : les boutons de Wayfire, gris, y sont bien visibles.
        "font": "P2i Titres Bold",
        "font_color": "#14213aff",
        "title_height": 28, "border_size": 2,
        "button_order": "minimize maximize close",
        "active_color": "#dce6f4ff", "inactive_color": "#eef1f6ff",
        # Fenêtres P2i sans cadre (bouton et menu P2i)
        "ignore_views": 'title is "Menu P2i"',
    },
    "place": {"mode": "center"},
    "move": {
        "activate": "<super> BTN_LEFT", "enable_snap": "true",
        "snap_threshold": 12, "quarter_snap_threshold": 60,
        "preview_base_color": "0.118 0.533 0.898 0.25",
        "preview_base_border": "0.118 0.533 0.898 0.9",
        "preview_border_width": 2,
    },
    "resize": {"activate": "<super> BTN_RIGHT"},
    "grid": {
        "duration": "320ms" if complet else "180ms",
        "type": "wobbly" if complet else "crossfade",
        "slot_l": "<super> KEY_LEFT", "slot_r": "<super> KEY_RIGHT",
        "slot_c": "<super> KEY_UP", "restore": "<super> KEY_DOWN",
        "slot_bl": "none", "slot_b": "none", "slot_br": "none",
        "slot_tl": "none", "slot_t": "none", "slot_tr": "none",
    },
    "wm-actions": {"toggle_showdesktop": "<super> KEY_D"},
    "animate": {
        "open_animation": "zoom" if complet else "fade",
        "close_animation": "zoom" if complet else "fade",
        "minimize_animation": "squeezimize" if complet else "fade",
        "duration": "380ms" if complet else "180ms",
        "zoom_duration": "380ms circle",
        "fade_duration": "250ms" if complet else "160ms",
        # Effet « aspirateur » à la réduction et à la réapparition des fenêtres
        "squeezimize_duration": "480ms sigmoid",
        "startup_duration": "900ms linear" if complet else "400ms linear",
    },
    "window-rules": {
        # Bouton P2i : petit, en haut à gauche, toujours visible
        "menu0": 'on created if title is "Menu P2i" then move 80 12',
        "menu": 'on created if title is "Menu P2i" then set always_on_top',
    },
    "idle": {"screensaver_timeout": -1, "dpms_timeout": 900, "toggle": "none"},
}
if complet:
    sections.update({
        "wobbly": {"friction": 3.2, "spring_k": 8.5, "grid_resolution": 8},
        "winshadows": {
            "shadow_color": "#00000066", "shadow_radius": 44, "vertical_offset": 10,
            "clip_shadow_inside": "true",
        },
        "blur": {
            "method": "kawase", "kawase_offset": 2.0, "kawase_iterations": 3,
            "kawase_degrade": 3, "saturation": 1.1,
            # Seul le menu P2i est translucide
            "blur_by_default": 'title is "Menu P2i"',
            "toggle": "none",
        },
        "scale": {
            "toggle": "<super> KEY_TAB", "duration": "420ms", "spacing": 48,
            "inactive_alpha": 0.85, "title_overlay": "all", "title_font_size": 14,
            "bg_color": "0.02 0.06 0.13 0.75", "text_color": "1 1 1 1",
            "middle_click_close": "true",
        },
        "switcher": {
            "next_view": "<alt> KEY_TAB", "prev_view": "<alt> <shift> KEY_TAB",
            "speed": 380, "view_thumbnail_scale": 0.9, "view_thumbnail_rotation": 24,
        },
        "zoom": {"modifier": "<super>", "smoothing_duration": "250ms linear"},
    })
else:
    sections["fast-switcher"] = {
        "activate": "<alt> KEY_TAB", "activate_backward": "<alt> <shift> KEY_TAB",
    }

print(f"# Généré par /usr/libexec/p2i/wayfire-config (niveau : {niveau}).")
print("# Ne pas modifier : ce fichier est réécrit à chaque ouverture de session")
print("# et à chaque changement du réglage « Effets graphiques ».")
for nom, options in sections.items():
    print(f"\n[{nom}]")
    for cle, val in options.items():
        # « # » commence un commentaire dans ce format : les couleurs s'écrivent « \\#rrggbbaa »
        print(f"{cle} = {str(val).replace('#', chr(92) + '#')}")
