'use strict';

const config = require('config');
const yargs = require('yargs');

const { argv } = yargs
    .command('npm start')
    .option('server', {
        describe: 'Start web server',
        type: 'boolean',
        alias: 'web',
    })
    .option('scrape', {
        describe: 'Scrape sites and networks defined in configuration',
        type: 'boolean',
    })
    .option('networks', {
        describe: 'Networks to scrape (overrides configuration)',
        type: 'array',
        alias: 'network',
    })
    .option('sites', {
        describe: 'Sites to scrape (overrides configuration)',
        type: 'array',
        alias: 'site',
    })
    .option('actors', {
        describe: 'Scrape actors by name or slug',
        type: 'array',
        alias: 'actor',
    })
    .option('with-releases', {
        describe: 'Fetch all releases for an actor',
        type: 'boolean',
        alias: 'with-scenes',
        default: false,
    })
    .option('with-profiles', {
        describe: 'Scrape profiles for new actors after fetching scenes',
        type: 'boolean',
        alias: 'with-actors',
        default: false,
    })
    .option('scene', {
        describe: 'Scrape scene info from URL',
        type: 'array',
        alias: 'release',
    })
    .option('movie', {
        describe: 'Scrape movie info from URL',
        type: 'array',
        alias: 'dvd',
    })
    .option('sources', {
        describe: 'Use these scrapers for actor data',
        type: 'array',
        alias: 'source',
    })
    .option('deep', {
        describe: 'Fetch details for all releases',
        type: 'boolean',
        default: true,
    })
    .option('latest', {
        describe: 'Scrape latest releases if available',
        type: 'boolean',
        default: true,
    })
    .option('upcoming', {
        describe: 'Scrape upcoming releases if available',
        type: 'boolean',
        default: true,
    })
    .option('redownload', {
        describe: 'Don\'t ignore duplicates, update existing entries',
        type: 'boolean',
        alias: 'force',
    })
    .option('after', {
        describe: 'Don\'t fetch scenes older than',
        type: 'string',
        default: config.fetchAfter.join(' '),
    })
    .option('last', {
        describe: 'Get the latest x releases, no matter the date range',
        type: 'number',
    })
    .option('null-date-limit', {
        describe: 'Limit amount of scenes when dates are missing.',
        type: 'number',
        default: config.nullDateLimit,
        alias: 'limit',
    })
    .option('page', {
        describe: 'Page to start scraping at',
        type: 'number',
        default: 1,
    })
    .option('save', {
        describe: 'Save fetched releases to database',
        type: 'boolean',
        default: true,
    })
    .option('inspect', {
        describe: 'Show data in console.',
        type: 'boolean',
        default: false,
    })
    .option('level', {
        describe: 'Log level',
        type: 'string',
        default: process.env.NODE_ENV === 'development' ? 'silly' : 'info',
    })
    .option('debug', {
        describe: 'Show error stack traces',
        type: 'boolean',
        default: process.env.NODE_ENV === 'development',
    });

module.exports = argv;
