"use strict";
(() => {
  // ns-hugo:/home/raoul-web/rc3_2021/html-infobeamer-content/assets/js/dom.js
  var html = htm.bind(preact.h);
  var schedule_meta_here_dom = (schedule) => {
    let inner = html`${schedule.map((talk) => html`
        <div class="talk-here-meta-box">
          <div class="speaker">${talk.personnames}:</div>
          <div class="title">${talk.title}</div>
          <div class="start-duration">
            <span class="start">Starting at ${talk.start}</span>
            <span class="duration">Duration: ${talk.duration} minutes</span>
          </div>
        </div>
        `)}`;
    return inner;
  };
  var schedule_abstract_here_dom = (schedule) => {
    let inner = html``;
    let placeHolder = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec ut urna. Curabitur lorem risus, sagittis vitae, accumsan a, iaculis id, metus. Suspendisse potenti. Fusce nonummy commodo dui. Fusce venenatis ligula in pede. Aliquam velit dui, commodo quis, porttitor eget, convallis et, nisi. Nam sed nisl nec elit suscipit ullamcorper. Cras ac enim vel dui vestibulum suscipit. Suspendisse venenatis. Nam pharetra. Pellentesque et arcu. Nam sed nisl nec elit suscipit ullamcorper. Aenean turpis ipsum, rhoncus vitae, posuere vitae, euismod sed, ligula. Integer risus velit, facilisis eget, viverra et, venenatis id, leo. Aenean ligula. Mauris sed nulla quis nisi interdum tempor. Nullam libero nunc, tristique eget, laoreet eu, sagittis id, ante. Aliquam sed erat. Vestibulum viverra varius enim. Donec at diam a tellus dignissim vestibulum. Nullam sapien mauris, venenatis at, fermentum at, tempus eu, urna.";
    schedule.forEach((talk) => {
      let abstract = talk.abstract !== void 0 ? talk.abstract : placeHolder;
      inner = html`<span class="text">${abstract}</span>`;
    });
    return inner;
  };
  var schedule_all_list_dom = (schedule) => {
    let inner = html`
        ${schedule.map((talk) => html`
        <div class="item">
          <div>
            <div class="title">${talk.title}</div>
          </div>
          <div class="details">
            <span class="start">${talk.start}</span>
            <span class="day">Day ${talk.day}</span>
            <span class="stage">${talk.room}</span>
          </div>
        </div>`)}`;
    return inner;
  };
  var update_schedule_dom = (schedule) => {
    const here_roomguid = "";
    const here_room = "Chaos-West TV";
    const here_number_events = 1;
    const all_number_events = 10;
    let allData = schedule.slice(0, all_number_events);
    let hereData = schedule.filter((i) => i.room === here_room).slice(0, 1);
    let nextHereMetaDom = schedule_meta_here_dom(hereData);
    let nextHereAbstractDom = schedule_abstract_here_dom(hereData);
    let nextAllMetaDom = schedule_all_list_dom(allData);
    let inner = html`
    <div class="slide">
      <div class="schedule">
        <div class="left">
          <div class="panel meta">
            <div class="header">Next Up Here</div>
            <div class="content">${nextHereMetaDom}</div>
          </div>
          <div class="panel abstract">
            <div class="header">Abstract</div>
            <div class="content">${nextHereAbstractDom}</div>
          </div>
        </div>
        <div class="right">
          <div class="panel list">
            <div class="header">Next Up at rC3</div>
            <div class="content">${nextAllMetaDom}</div>
          </div>
        </div>
      </div>
    </div>`;
    return inner;
  };
  var music_playing_now_dom = (music) => {
    let inner = html`
        <div class="music">
            ${music.map((current) => html`
                <div class="line1">
                  <span class="header">Now playing:</span>
                  <span class="license">(${current.license})</span>
                </div>
                <div class="line2">
                  <span class="title">«${current.title}»</span>
                  <span class="by">by</span>
                  <span class="artist">${current.artist}</span>
                </div>`)}
        </div>`;
    return inner;
  };
  var get_tweet_author = (data, tweet) => {
    let authorId = tweet.author_id;
    let users = data.includes.users;
    let author = users.find((item) => item.id === authorId);
    let userName = author !== void 0 ? author.username : "NoOne";
    return userName;
  };
  var get_tweet_text = (data, tweet) => tweet.text;
  var get_tweet_profile_image = (data, tweet) => {
    const defaultProfileImageUrl = "https://abs.twimg.com/sticky/default_profile_images/default_profile_normal.png";
    let authorId = tweet.author_id;
    let users = data.includes.users;
    let author = users.find((item) => item.id === authorId);
    let profileImageUrl = author !== void 0 ? author.profile_image_url : defaultProfileImageUrl;
    return profileImageUrl;
  };
  var single_tweet_dom = (data, tweet) => {
    let userName = get_tweet_author(data, tweet);
    let profileImageUrl = get_tweet_profile_image(data, tweet);
    let text = get_tweet_text(data, tweet);
    let inner = html`
      <div class="tweet slider">
        <div class="container">
          <img class="profile-image" src="${profileImageUrl}"/>
          <div class="content">
            <div class="username">@${userName}</div>
            <div class="text">${text}</div>
          </div>
        </div>
      </div>`;
    return inner;
  };
  var social_container_dom = (data) => {
    let inner = html``;
    data.forEach((d) => {
      let tweets = d.data;
      inner = html`
        <div id="bottom-bar" class="visible bottom-bar">
          <div id="ticker-wrap" class="ticker-wrap">
            <div class="ticker switcher">
              ${tweets.map((t) => single_tweet_dom(d, t))}
            </div>
          </div>
        </div>`;
    });
    return inner;
  };
  function update_main_slide(data) {
    let schedule = data.schedule;
    let music = data.music;
    let twitter = data.twitter;
    let scheduleDom = update_schedule_dom(schedule);
    let musicDom = music_playing_now_dom(music);
    let twitterDom = social_container_dom(twitter);
    let inner = html`
${scheduleDom}
${musicDom}
${twitterDom}
`;
    const anchorElId = "main";
    const el = document.getElementById(anchorElId);
    preact.render(inner, el);
  }

  // <stdin>
  var scheduleData = [];
  var musicData = [];
  var twitterData = [];
  var twitter_limiter = (idata) => {
    const numberTweets = 20;
    let dataCopy = JSON.parse(JSON.stringify(idata));
    dataCopy.forEach((d) => {
      let tweets = d.data;
      if (tweets.length > 0) {
        while (tweets.length < 20) {
          tweets = tweets.concat(tweets);
        }
      }
      d.data = tweets.slice(0, numberTweets);
    });
    return dataCopy;
  };
  if (window.Worker) {
    const workerBaseURL = window.infoBeamerConfig.get("workerBaseURL");
    const scheduleWorkerCode = workerBaseURL + "js/schedule_worker.js";
    console.log("Loading schedule worker JS from: " + scheduleWorkerCode);
    const scheduleWorker = new Worker(scheduleWorkerCode);
    const scheduleURL = window.infoBeamerConfig.get("scheduleURL");
    const scheduleFetchInterval = window.infoBeamerConfig.get("scheduleFetchInterval");
    scheduleWorker.postMessage({
      msgType: "ScheduleFetchConfig",
      scheduleURL,
      scheduleFetchInterval
    });
    scheduleWorker.onmessage = function(e) {
      let msgType = e.data.msgType;
      if (msgType === "ScheduleUpdate") {
        scheduleData = e.data.schedule;
        let time = e.data.timestamp;
        console.log("Message: " + msgType + " at " + time);
        console.log(scheduleData);
        update_screen();
      }
    };
    const musicWorkerCode = workerBaseURL + "js/generic_fetch_worker.js";
    console.log("Loading worker JS from: " + musicWorkerCode);
    const musicWorker = new Worker(musicWorkerCode);
    const musicType = "Music";
    const musicURL = window.infoBeamerConfig.get("musicURL");
    const musicFetchInterval = window.infoBeamerConfig.get("musicFetchInterval");
    musicWorker.postMessage({
      fetchType: musicType,
      fetchURL: musicURL,
      fetchInterval: musicFetchInterval
    });
    musicWorker.onmessage = function(e) {
      let msgType = e.data.msgType;
      if (msgType === musicType) {
        musicData = [e.data.json];
        let time = e.data.timestamp;
        console.log("Message: " + msgType + " at " + time);
        console.log(musicData);
        update_screen();
      }
    };
    const twitterWorkerCode = workerBaseURL + "js/generic_fetch_worker.js";
    console.log("Loading worker JS from: " + twitterWorkerCode);
    const twitterWorker = new Worker(twitterWorkerCode);
    const twitterType = "Twitter";
    const twitterURL = window.infoBeamerConfig.get("twitterURL");
    const twitterFetchInterval = window.infoBeamerConfig.get("twitterFetchInterval");
    twitterWorker.postMessage({
      fetchType: twitterType,
      fetchURL: twitterURL,
      fetchInterval: twitterFetchInterval
    });
    twitterWorker.onmessage = function(e) {
      let msgType = e.data.msgType;
      if (msgType === twitterType) {
        twitterData = [e.data.json];
        twitterData = twitter_limiter(twitterData);
        let time = e.data.timestamp;
        console.log("Message: " + msgType + " at " + time);
        console.log(twitterData);
        update_screen();
      }
    };
  } else {
    console.log("Your browser doesn't support web workers.");
  }
  function update_screen() {
    let time = new Date();
    console.log("Updating screen at at: " + time);
    update_main_slide({ schedule: scheduleData, music: musicData, twitter: twitterData });
  }
  function main_loop() {
    update_screen();
    setTimeout(main_loop, 10 * 1e3);
  }
  main_loop();
})();
