import { getStore } from '@netlify/blobs'

const emojiMap = (genre, artist) => {
  const DEFAULT = "๐ŸŽง"
  const normalizedArtist = artist?.toLowerCase()
  if (normalizedArtist === "afi") return "โ›ต๏ธ๐ŸŒ…"
  if (normalizedArtist === "agalloch") return "๐Ÿ”๏ธ"
  if (normalizedArtist === "american football") return "๐Ÿ "
  if (normalizedArtist === "augury") return "โ˜„๏ธ"
  if (normalizedArtist === "autopsy") return "๐ŸงŸ"
  if (normalizedArtist === "balance and composure") return "๐Ÿช‚"
  if (normalizedArtist === "bedsore") return "๐Ÿ›๏ธ"
  if (normalizedArtist === "birds in row") return "๐Ÿฆ…๐Ÿฆ‰๐Ÿฆข"
  if (normalizedArtist === "black flag") return "๐Ÿด"
  if (normalizedArtist === "blink-182") return "๐Ÿ˜ต"
  if (normalizedArtist === "blood incantation") return "๐Ÿ‘ฝ"
  if (normalizedArtist === "bolt thrower") return "โš”๏ธ"
  if (normalizedArtist === "bruce springsteen") return "๐Ÿ‡บ๐Ÿ‡ธ"
  if (normalizedArtist === "carcass") return "๐Ÿฅผ"
  if (normalizedArtist === "counting crows") return "๐Ÿฆโ€โฌ›"
  if (normalizedArtist === "david bowie") return "๐Ÿ‘จ๐Ÿปโ€๐ŸŽค"
  if (normalizedArtist === "devoid of thought") return "๐Ÿšซ๐Ÿ’ญ"
  if (normalizedArtist === "deftones") return "๐Ÿฆ‰"
  if (normalizedArtist === "drug church") return "๐Ÿ’Šโ›ช๏ธ"
  if (normalizedArtist === "fleshwater") return "๐Ÿค"
  if (normalizedArtist === "full of hell & nothing") return "๐Ÿซจ๐ŸŽธ"
  if (normalizedArtist === "imperial triumphant") return "๐ŸŽญ"
  if (normalizedArtist === "mastodon") return "๐Ÿ‹"
  if (normalizedArtist === "minor threat") return "๐Ÿ‘จ๐Ÿปโ€๐Ÿฆฒ"
  if (normalizedArtist === "nomeansno") return "๐Ÿต๐Ÿฎ๐Ÿšฌ"
  if (normalizedArtist === "nothing") return "๐Ÿณ๏ธ"
  if (normalizedArtist === "panopticon") return "๐Ÿช•๐Ÿชฆ"
  if (normalizedArtist === "radiohead") return "๐Ÿ“ป"
  if (normalizedArtist === "taylor swift") return "๐Ÿ‘ธ๐Ÿผ"
  if (normalizedArtist === "the mars volta") return "๐Ÿ’ก๐Ÿ˜ฎ"
  if (normalizedArtist === "thrice") return "๐Ÿ‘จโ€๐ŸŽจ๐Ÿš‘"
  if (normalizedArtist === "tom waits") return "๐Ÿคน๐Ÿป"
  if (normalizedArtist === "webbed wing") return "๐Ÿคก"

  // early return for bad input
  if (!genre) return DEFAULT

  if (genre.includes("death metal") || genre.includes("death-doom")) return "๐Ÿ’€"
  if (genre.includes("black metal") || genre.includes("blackgaze")) return "๐Ÿชฆ"
  if (genre.includes("metal")) return "๐Ÿค˜"
  if (genre.includes("emo") || genre.includes("blues")) return "๐Ÿ˜ข"
  if (genre.includes("grind") || genre.includes("powerviolence")) return "๐Ÿซจ"
  if (
    genre.includes("country") ||
    genre.includes("americana") ||
    genre.includes("bluegrass") ||
    genre.includes("folk") ||
    genre.includes("songwriter")
  )
    return "๐Ÿช•"
  if (genre.includes("post-punk")) return "๐Ÿ˜”"
  if (genre.includes("dance-punk")) return "๐Ÿชฉ"
  if (genre.includes("punk") || genre.includes("hardcore")) return "โœŠ"
  if (genre.includes("hip hop")) return "๐ŸŽค"
  if (genre.includes("progressive") || genre.includes("experimental"))
    return "๐Ÿค“"
  if (genre.includes("jazz")) return "๐ŸŽบ"
  if (genre.includes("psychedelic")) return "๐Ÿ’Š"
  if (genre.includes("dance") || genre.includes("electronic")) return "๐Ÿ’ป"
  if (genre.includes("ambient")) return "๐Ÿคซ"
  if (
    genre.includes("alternative") ||
    genre.includes("rock") ||
    genre.includes("shoegaze") ||
    genre.includes("screamo") ||
    genre.includes("grunge")
  )
    return "๐ŸŽธ"
  return DEFAULT
}

export default async () => {
  const scrobbles = getStore('scrobbles')
  const headers = {
    "Content-Type": "application/json",
    "Cache-Control": "public, s-maxage=360, stale-while-revalidate=1080",
  }
  const scrobbleData = await scrobbles.get('now-playing', { type: 'json'})

  if (!scrobbleData) return new Response(JSON.stringify({}, { headers }))

  return new Response(JSON.stringify({
      content: `${emojiMap(
        scrobbleData['genre'],
        scrobbleData['artist']
      )} ${scrobbleData['track']} by <a href="${scrobbleData['url']}">${
        scrobbleData['artist']
      }</a>`,
    }),
    { headers }
  )
}

export const config = {
  cache: "manual",
  path: "/api/now-playing"
}