const api = require('../core/api')
const _ = require('lodash')

module.exports = async function (streams = []) {
  streams = _.filter(streams, stream => stream.is_nsfw === false)

  await api.countries.load()
  const countries = await api.countries.all()
  await api.regions.load()
  let regions = await api.regions.all()
  regions = regions.filter(r => r.code !== 'INT')
  await api.subdivisions.load()
  const subdivisions = await api.subdivisions.all()

  let output = []
  for (const country of countries) {
    let countryRegionCodes = _.filter(regions, { countries: [country.code] }).map(
      r => `r/${r.code}`
    )
    const countrySubdivisions = _.filter(subdivisions, { country: country.code })
    const countryAreaCodes = countryRegionCodes.concat(countrySubdivisions.map(s => `s/${s.code}`))
    countryAreaCodes.push(`c/${country.code}`)

    let items = _.filter(streams, stream => {
      return _.intersection(stream.broadcast_area, countryAreaCodes).length
    })

    output.push({ filepath: `countries/${country.code.toLowerCase()}.m3u`, items })

    for (let subdivision of countrySubdivisions) {
      let subdivisionItems = _.filter(streams, stream => {
        return stream.broadcast_area.includes(`s/${subdivision.code}`)
      })

      if (subdivisionItems.length) {
        output.push({
          filepath: `subdivisions/${subdivision.code.toLowerCase()}.m3u`,
          items: subdivisionItems
        })
      }
    }
  }

  let intItems = _.filter(streams, stream => stream.broadcast_area.includes('r/INT'))
  output.push({
    filepath: `countries/int.m3u`,
    items: intItems
  })

  output = output.filter(f => f.items.length > 0)

  return output
}