use std::path::PathBuf;
use std::{env, fs};
use xdgen::{App, Context, FluentString};

fn main() {
    let ctx = Context::new("../i18n", env::var("CARGO_PKG_NAME").unwrap()).unwrap();

    [
        (
            "com.system76.CosmicSettings",
            "app",
            "xdg-entry-comment",
            "xdg-entry-keywords",
        ),
        (
            "com.system76.CosmicSettings.About",
            "xdg-entry-about",
            "xdg-entry-about-comment",
            "xdg-entry-about-keywords",
        ),
        (
            "com.system76.CosmicSettings.Accessibility",
            "xdg-entry-ally",
            "xdg-entry-a11y-comment",
            "xdg-entry-a11y-keywords",
        ),
        (
            "com.system76.CosmicSettings.Appearance",
            "appearance",
            "xdg-entry-appearance-comment",
            "xdg-entry-appearance-keywords",
        ),
        (
            "com.system76.CosmicSettings.Applications",
            "xdg-entry-applications",
            "xdg-entry-applications-comment",
            "xdg-entry-applications-keywords",
        ),
        (
            "com.system76.CosmicSettings.Bluetooth",
            "bluetooth",
            "xdg-entry-bluetooth-comment",
            "xdg-entry-bluetooth-keywords",
        ),
        (
            "com.system76.CosmicSettings.DateTime",
            "xdg-entry-date-time",
            "xdg-entry-date-time-comment",
            "xdg-entry-date-time-keywords",
        ),
        (
            "com.system76.CosmicSettings.DefaultApps",
            "xdg-entry-default-apps",
            "xdg-entry-default-apps-comment",
            "xdg-entry-default-apps-keywords",
        ),
        (
            "com.system76.CosmicSettings.Desktop",
            "xdg-entry-desktop",
            "xdg-entry-desktop-comment",
            "xdg-entry-desktop-keywords",
        ),
        (
            "com.system76.CosmicSettings.Displays",
            "xdg-entry-displays",
            "xdg-entry-displays-comment",
            "xdg-entry-displays-keywords",
        ),
        (
            "com.system76.CosmicSettings.Dock",
            "xdg-entry-dock",
            "xdg-entry-dock-comment",
            "xdg-entry-dock-keywords",
        ),
        (
            "com.system76.CosmicSettings.Input",
            "xdg-entry-input",
            "xdg-entry-input-comment",
            "xdg-entry-input-keywords",
        ),
        (
            "com.system76.CosmicSettings.Keyboard",
            "xdg-entry-keyboard",
            "xdg-entry-keyboard-comment",
            "xdg-entry-keyboard-keywords",
        ),
        (
            "com.system76.CosmicSettings.Mouse",
            "xdg-entry-mouse",
            "xdg-entry-mouse-comment",
            "xdg-entry-mouse-keywords",
        ),
        (
            "com.system76.CosmicSettings.Network",
            "xdg-entry-network",
            "xdg-entry-network-comment",
            "xdg-entry-network-keywords",
        ),
        (
            "com.system76.CosmicSettings.Notifications",
            "xdg-entry-notifications",
            "xdg-entry-notifications-comment",
            "xdg-entry-notifications-keywords",
        ),
        (
            "com.system76.CosmicSettings.Panel",
            "xdg-entry-panel",
            "xdg-entry-panel-comment",
            "xdg-entry-panel-keywords",
        ),
        (
            "com.system76.CosmicSettings.Power",
            "xdg-entry-power",
            "xdg-entry-power-comment",
            "xdg-entry-power-keywords",
        ),
        (
            "com.system76.CosmicSettings.RegionLanguage",
            "xdg-entry-region-language",
            "xdg-entry-region-language-comment",
            "xdg-entry-region-language-keywords",
        ),
        (
            "com.system76.CosmicSettings.Sound",
            "xdg-entry-sound",
            "xdg-entry-sound-comment",
            "xdg-entry-sound-keywords",
        ),
        (
            "com.system76.CosmicSettings.StartupApps",
            "xdg-entry-startup-apps",
            "xdg-entry-startup-apps-comment",
            "xdg-entry-startup-apps-keywords",
        ),
        (
            "com.system76.CosmicSettings.System",
            "xdg-entry-system",
            "xdg-entry-system-comment",
            "xdg-entry-system-keywords",
        ),
        (
            "com.system76.CosmicSettings.Time",
            "xdg-entry-time-language",
            "xdg-entry-time-language-comment",
            "xdg-entry-time-language-keywords",
        ),
        (
            "com.system76.CosmicSettings.Touchpad",
            "xdg-entry-touchpad",
            "xdg-entry-touchpad-comment",
            "xdg-entry-touchpad-keywords",
        ),
        (
            "com.system76.CosmicSettings.Users",
            "xdg-entry-users",
            "xdg-entry-users-comment",
            "xdg-entry-users-keywords",
        ),
        (
            "com.system76.CosmicSettings.Vpn",
            "vpn",
            "xdg-entry-vpn-comment",
            "xdg-entry-vpn-keywords",
        ),
        (
            "com.system76.CosmicSettings.Wallpaper",
            "xdg-entry-wallpaper",
            "xdg-entry-wallpaper-comment",
            "xdg-entry-wallpaper-keywords",
        ),
        (
            "com.system76.CosmicSettings.WindowManagement",
            "xdg-entry-window-management",
            "xdg-entry-window-management-comment",
            "xdg-entry-window-management-keywords",
        ),
        (
            "com.system76.CosmicSettings.Wired",
            "xdg-entry-wired",
            "xdg-entry-wired-comment",
            "xdg-entry-wired-keywords",
        ),
        (
            "com.system76.CosmicSettings.Wireless",
            "xdg-entry-wireless",
            "xdg-entry-wireless-comment",
            "xdg-entry-wireless-keywords",
        ),
        (
            "com.system76.CosmicSettings.Workspaces",
            "xdg-entry-workspaces",
            "xdg-entry-workspaces-comment",
            "xdg-entry-workspaces-keywords",
        ),
        (
            "com.system76.CosmicSettings.LegacyApplications",
            "xdg-entry-x11-applications",
            "xdg-entry-x11-applications-comment",
            "xdg-entry-x11-applications-keywords",
        ),
    ]
    .into_iter()
    .map(|(id, name, comment, keywords)| {
        let app = App::new(FluentString(name))
            .comment(FluentString(comment))
            .keywords(FluentString(keywords));

        let output = PathBuf::from("../target/xdgen");

        (id, app, output)
    })
    .for_each(|(id, app, output)| {
        fs::create_dir_all(&output).unwrap();
        fs::write(
            output.join(format!("{}.desktop", id)),
            app.expand_desktop(
                dbg!(format!("../resources/applications/{}.desktop", id)),
                &ctx,
            )
            .unwrap(),
        )
        .unwrap();
    });
}
