const {
  assetDefaults: { thumbnail },
  details: { host },
} = require('@config/siteConfig');

const padSizes = {
  small : 'padSmall',
  medium: 'padMedium',
  large : 'padLarge',
};

const argumentProcessors = {
  'bottom': async (config) => {
    config.classNames.push('bottom');
  },
  'right': async (config) => {
    config.classNames.push('right');
  },
  'pad': async (config, val) => {
    config.classNames.push(padSizes[val]);
  },
  'logoClaim': async (config, val) => {
    config.logoUrl = `${host}/${val}`;
  },
  'link': async (config, val) => {
    config.logoLink = val;
  },
};

const parseLogoConfigParam = async (rawConfig) => {
  if (rawConfig) {
    let parsedConfig = {
      classNames: ['logoLink'],
      logoUrl   : thumbnail,
    };
    let splitConfig;
    try {
      splitConfig = rawConfig.split(',');
    } catch (e) { }

    if (!splitConfig) {
      return false;
    }

    for (let i = 0; i < splitConfig.length; i++) {
      let currentArgument = splitConfig[i];

      if (argumentProcessors[currentArgument]) {
        await argumentProcessors[currentArgument](parsedConfig);
      } else {
        const splitArgument = currentArgument.split(':');
        if (argumentProcessors[splitArgument[0]]) {
          await argumentProcessors[splitArgument[0]](parsedConfig, splitArgument[1]);
        }
      }
    }

    parsedConfig.classNames = parsedConfig.classNames.join(' ');

    return parsedConfig;
  }

  return false;
};

const sendVideoEmbedPage = async ({ params }, res) => {
  let {
    claimId,
    config,
    name,
  } = params;

  // if channel then swap name and claimId for order
  if (name[0] === '@' && name.includes(':')) {
    const temp = name;
    name = claimId;
    claimId = temp;
  }

  const logoConfig = await parseLogoConfigParam(config);

  // test setting response headers
  console.log('removing x-frame-options');
  res.removeHeader('X-Frame-Options');
  // get and render the content
  res.status(200).render('embed', { host, claimId, name, logoConfig });
};

module.exports = sendVideoEmbedPage;