// # Asset helper
// Usage: `{{asset "css/screen.css"}}`
//
// Returns the path to the specified asset.
const {urlUtils} = require('../services/proxy');
const metaData = require('../meta');
const {SafeString} = require('../services/handlebars');

const errors = require('@tryghost/errors');
const tpl = require('@tryghost/tpl');
const get = require('lodash/get');
const {getAssetUrl} = metaData;

const messages = {
    pathIsRequired: 'The {{asset}} helper must be passed a path'
};

module.exports = function asset(path, options) {
    const hasMinFile = get(options, 'hash.hasMinFile');

    if (!path) {
        throw new errors.IncorrectUsageError({
            message: tpl(messages.pathIsRequired)
        });
    }
    if (typeof urlUtils.getSiteUrl() !== 'undefined'
            && typeof urlUtils.getAdminUrl() !== 'undefined'
            && urlUtils.getSiteUrl() !== urlUtils.getAdminUrl()) {
        const target = new URL(getAssetUrl(path, hasMinFile), urlUtils.getSiteUrl());
        return new SafeString(
            target.href
        );
    }

    return new SafeString(
        getAssetUrl(path, hasMinFile)
    );
};
