use dioxus::prelude::*;

use bard::*;



const FAVICON: Asset = asset!("/assets/favicon.ico");
const BLOG: Asset = asset!("/assets/blog.css");
const BLOG_IMAGE: Asset = asset!("/assets/runes_and_ramblings_text.png",
                                 AssetOptions::builder().with_hash_suffix(false));
const POST_IMAGE: Asset = asset!("/assets/runes_and_ramblings_logo.png",
                                 AssetOptions::builder().with_hash_suffix(false));



fn main()
{
   #[cfg(feature = "server")]
   {
      let rt = tokio::runtime::Runtime::new().unwrap();
      rt.block_on(async
      {
         let db_path = "/home/myrddin/cybermages/website/tavern.db";

         let _ = bard::init_database(db_path).await;
      });
   }

   LaunchBuilder::new().launch(App);
}

#[component]
fn App() -> Element
{
   let custom_settings = BardSettings
   {
      blog_name: Some(String::from("Blog Test")),
      blog_image: Some(BLOG_IMAGE),
      default_post_image: Some(POST_IMAGE),
      stylesheet: StylesheetBehavior::Extend(BLOG),
   };
   provide_context(custom_settings);

   rsx!
   {
      document::Link { rel: "icon", href: FAVICON }
      Router::<Page> {}
   }
}

/// Home page
#[component]
fn Home() -> Element
{
   rsx! {
      h1 { "Blog Test" }
   }
}

/// This is the content for the About page.
#[component]
pub fn PageNotFound(route: Vec<String>) -> Element
{
   rsx! {
      h1 { "Page not found" }
      p { "We are terribly sorry, but the page you requested doesn't exist." }
      pre { color: "red", "log:\nattemped to navigate to: {route:?}" }
   }
}

/// Shared navbar component.
#[component]
fn Navbar() -> Element
{
   rsx! {
       div {
           id: "navbar",
           Link {
               to: Page::Home {},
               "Home"
           }
           Link {
               to: Page::Bard{ child: bard::Page::Blog { tag: String::from("all") }},
               "Blog"
           }
           //a { href: "/blog/all", "Blog" }
       }

       Outlet::<Page> {}
   }
}



#[derive(Debug, Clone, Routable, PartialEq)]
#[rustfmt::skip]
pub enum Page
{
   #[layout(Navbar)]
   #[route("/")]
   Home {},

   #[child("/blog")]
   Bard
   {
      child: bard::Page
   },

   #[route("/:..route")]
   PageNotFound { route: Vec<String> }
}
