const { URL } = require('url')
const fileHash = require('../../util/backup_filehash')
const apple_timestamp = require('../../util/apple_timestamp')
const HISTORY_DB = fileHash('Library/Safari/History.db', 'AppDomain-com.apple.mobilesafari')

module.exports = {
  version: 4,
  name: 'safari.webhistory',
  description: `List all web history`,
  requiresBackup: true,

  // Run on a v3 lib / backup object
  run (lib, { backup }) {
    return getWebHistory(backup)
  },

  // Available fields.
  output: {
    timestamp: el => el.XFORMATTEDDATESTRING,
    origin: el => new URL(el.url || '').origin || '',
    url: el => el.url,
    title: el => (el.title || '')
  }
}

/// Get all web history entries.
function getWebHistory (backup) {
  return new Promise((resolve, reject) => {
    backup.openDatabase(HISTORY_DB)
      .then(db => {
        db.all(`SELECT *, ${apple_timestamp.parse('visit_time')} AS XFORMATTEDDATESTRING from history_visits LEFT JOIN history_items ON history_items.ROWID = history_visits.history_item`, function (err, rows) {
          if (err) reject(err)

          resolve(rows)
        })
      })
      .catch(reject)
  })
}