const api = require('qbittorrent-api-v2')
const dotenv = require('dotenv')
const Torrent = require('./models/torrent.class.js')
const Stat = require('./models/stat.class.js')

dotenv.config()

const connection= api.connect(process.env.QBIT_HOST, process.env.QBIT_USER, process.env.QBIT_PASS)


class Qbit {
  async get_all(prop) {
    try {
    const res = await (await connection).torrents('all', null, prop.name, String(prop.reverse), '20', null, null)
    const torrents = []
        res.forEach((el) => {
          const t = new Torrent(el)
          torrents.push(t)
        })
    return torrents
    }
    catch(err){
      return `something went wrong:${err}`
    }
  }

  async get_session_stats() {
    try {
    const res = await (await connection).transferInfo()
    return new Stat(res)
    }
    catch(err){
      return `something went wrong:${err}`
    }
  }

  async pause_torrents(torrents) {
    let _torrents  = ''
    torrents.forEach(el=> {
      _torrents += el + '|'
    })
    try {
      return await (await connection).pauseTorrents(_torrents)
      }
      catch(err){
        return `something went wrong:${err}`
      }
  }

  async pause_all() {
    try {
      return  await (await connection).pauseTorrents('all')
      }
      catch(err){
        return `something went wrong:${err}`
      }
  }

  async resume_torrents(torrents) {
    let _torrents  = ''
    torrents.forEach(el=> {
      _torrents += el + '|'
    })
    console.log(_torrents);
    try {
      return await (await connection).resumeTorrents(_torrents)
      }
      catch(err){
        return `something went wrong:${err}`
      }
  }

  async resume_all() {
    try {
      return await (await connection).resumeTorrents('all')
      }
      catch(err){
        return `something went wrong:${err}`
      }
  }

  async remove_torrents(torrents) {
    let _torrents  = ''
    torrents.forEach(el=> {
      _torrents += el + '|'
    })
    console.log(_torrents);
    try {
      return await (await connection).deleteTorrents(_torrents, 'true')
      }
      catch(err){
        return `something went wrong:${err}`
      }
  }

  async add(torrent) {
    return new Promise((resolve, reject) => {
      connection.add(torrent.path, null, null, (err, res) => {
        resolve(res)
        reject(err)
      })
    })
  }
}

const qbit = new Qbit();

module.exports = qbit