process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0

const helper = require('./helper')
const ffmpeg = require('fluent-ffmpeg')

const config = {
  debug: process.env.npm_config_debug || false,
  country: process.env.npm_config_country,
  exclude: process.env.npm_config_exclude,
  timeout: 10
}

let stats = {
  playlists: 0,
  channels: 0,
  failures: 0
}

async function test() {

  const playlist = helper.parsePlaylist('index.m3u')
  
  const countries = helper.filterPlaylists(playlist.items, config.country, config.exclude)

  for(let country of countries) {

    stats.playlists++

    console.log(`Processing '${country.url}'...`)

    const playlist = helper.parsePlaylist(country.url)

    for(let item of playlist.items) {

      stats.channels++

      if(config.debug) { console.log(`Checking '${item.url}'...`) }

      await new Promise(resolve => {
        
        const timeout = setTimeout(() => {

          resolve()
        
        }, config.timeout * 1000)

        ffmpeg(item.url, { timeout: 60 }).ffprobe((err) => {
      
          if(err) {
            const message = helper.parseMessage(err, item.url)

            stats.failures++

            helper.writeToLog(country.url, message, item.url)

            console.log(`${message} '${item.url}'`)
          }

          clearTimeout(timeout)

          resolve()

        })
      })

    }
  }

  if(stats.failures === 0) {

    console.log(`OK (${stats.playlists} playlists, ${stats.channels} channels)`)
    
  } else {

    console.log(`FAILURES! (${stats.playlists} playlists, ${stats.channels} channels, ${stats.failures} failures)`)

    process.exit(1)

  }

}

console.log('Test is running...')

test()