#![recursion_limit = "128"]
#![feature(decl_macro, proc_macro_hygiene, try_trait)]

extern crate gettext;
#[macro_use]
extern crate gettext_macros;
#[macro_use]
extern crate lazy_static;
#[macro_use]
extern crate stdweb;

use stdweb::web::{event::*, *};

init_i18n!(
    "plume-front",
    ar,
    bg,
    ca,
    cs,
    de,
    en,
    eo,
    es,
    fr,
    gl,
    hi,
    hr,
    it,
    ja,
    nb,
    pl,
    pt,
    ro,
    ru,
    sr,
    sk,
    sv
);

mod editor;

compile_i18n!();

lazy_static! {
    static ref CATALOG: gettext::Catalog = {
        let catalogs = include_i18n!();
        let lang = js! { return navigator.language }.into_string().unwrap();
        let lang = lang.splitn(2, '-').next().unwrap_or("en");

        let english_position = catalogs
            .iter()
            .position(|(language_code, _)| *language_code == "en")
            .unwrap();
        catalogs
            .iter()
            .find(|(l, _)| l == &lang)
            .unwrap_or(&catalogs[english_position])
            .clone()
            .1
    };
}

fn main() {
    menu();
    search();
    editor::init()
        .map_err(|e| console!(error, format!("Editor error: {:?}", e)))
        .ok();
}

/// Toggle menu on mobile device
///
/// It should normally be working fine even without this code
/// But :focus-within is not yet supported by Webkit/Blink
fn menu() {
    if let Some(button) = document().get_element_by_id("menu") {
        if let Some(menu) = document().get_element_by_id("content") {
            button.add_event_listener(|_: ClickEvent| {
                document()
                    .get_element_by_id("menu")
                    .map(|menu| menu.class_list().add("show"));
            });
            menu.add_event_listener(|_: ClickEvent| {
                document()
                    .get_element_by_id("menu")
                    .map(|menu| menu.class_list().remove("show"));
            });
        }
    }
}

/// Clear the URL of the search page before submitting request
fn search() {
    if let Some(form) = document().get_element_by_id("form") {
        form.add_event_listener(|_: SubmitEvent| {
            document()
                .query_selector_all("#form input")
                .map(|inputs| {
                    for input in inputs {
                        js! {
                            if (@{&input}.name === "") {
                                @{&input}.name = @{&input}.id
                            }
                            if (@{&input}.name && !@{&input}.value) {
                                @{&input}.name = "";
                            }
                        }
                    }
                })
                .ok();
        });
    }
}
