const {seasonEpisodeFormat, episodeNumber} = require('../../utils/filters');
const fs = require('fs/promises');
path = require('path')

module.exports = {
  "layout": "episode",
  "tags":['episode'],
  "eleventyComputed": {
    "episode": "{{page.fileSlug | episodeNumber: episode}}",
    "image": async (data) => {
      const image_locations_promises = [
        data.image,
        `${data.page.filePathStem}.jpg`,
        `${data.page.filePathStem}.png`,
        '../image.jpg',
        '../image.png',
        '../../image.jpg',
        '../../image.png'
      ].filter(image_path=>image_path).map((image_path)=>
        fs.access(path.resolve(data.page.inputPath, image_path))
        .then(()=>path.resolve(data.page.filePathStem, image_path))
        .catch(()=>null)
      )
      return (await Promise.all(image_locations_promises)).find(i=>i)
    },
    "podcast": podcastData
  }
}

async function podcastData (data) {
  var file_stem
  if (data.season === 1) {
    file_stem = `ep${data.episode}`
  } else {
    file_stem = `${seasonEpisodeFormat(null, data).toLowerCase()}`
  }
  const mp3_exists_promise = new Promise ((resolve, reject) => {
    if (data.podcast.enclosureUrl) {
      resolve(data.podcast.enclosureUrl)
    } else {
      const url = `${data.site.cdn}/${file_stem}.mp3`
      fetch(url, { method: "HEAD" })
      .then((res)=>{
        if (res.ok) {
          resolve(`${url}`)
        } else {
          reject(new Error(`No file at ${url}`));
        }
      })
    }
  }).catch((e)=>{return null})

  const transcript_exists_promise = new Promise ((resolve, reject) => {
    if (data.podcast.transcriptUrl) {
      resolve(data.podcast.transcriptUrl)
    } else {
      const url = `${data.site.cdn}/${file_stem}.srt`
      fetch(url, { method: "HEAD" })
      .then((res)=>{
        if (res.ok) {
          resolve(`${url}`)
        } else {
          reject(new Error(`No file at ${url}`));
        }
      })
    }
  }).catch((e)=>{return null})

  const result =  {
    "enclosureUrl": await mp3_exists_promise,
    "transcriptUrl": await transcript_exists_promise,
    "title": data.podcast.title || `${seasonEpisodeFormat(null, data)}: ${data.title || "Episode " + data.episode}`,
    "image" : data.podcast.image || data.image
  }

  if (result.enclosureUrl != null) {
    return result
  } else {
    return false
  } 
}