const Channel = require('./Channel')
const file = require('./file')

module.exports = class Playlist {
  constructor({ header, items, url, name, country }) {
    this.url = url
    this.name = name
    this.country = country
    this.header = header
    this.channels = items
      .map(item => new Channel({ data: item, header, sourceUrl: url }))
      .filter(channel => channel.url)
  }

  toString(options = {}) {
    const config = { raw: false, ...options }
    let parts = ['#EXTM3U']
    for (let key in this.header.attrs) {
      let value = this.header.attrs[key]
      if (value) {
        parts.push(`${key}="${value}"`)
      }
    }

    let output = `${parts.join(' ')}\n`
    for (let channel of this.channels) {
      output += channel.toString(config.raw)
    }

    return output
  }

  save() {
    const original = file.read(this.url)
    const output = this.toString({ raw: true })
    if (original === output) {
      return false
    } else {
      file.create(this.url, output)
    }

    return true
  }
}