const apiPlaceholderRE = /#\{\{API\}\}/g;
const homePlaceholderRE = /#\{\{HOME\}\}/g;
const forumPlacehilderRE = /#\{\{FORUM\}\}/g;
const forumProxyPlaceholderRE = /#\{\{FORUM_PROXY\}\}/g;

exports.createRedirects = function createRedirects(locations) {
  const { api, home, forum, forumProxy } = locations;

  if (!(api && home && forum && forumProxy)) {
    throw new Error(`One or more locations are missing, all are required.

    api: ${api}
    home: ${home}
    forum: ${forum}
    forumProxy: ${forumProxy}

    `);
  }

  return template
    .replace(apiPlaceholderRE, api)
    .replace(homePlaceholderRE, home)
    .replace(forumPlacehilderRE, forum)
    .replace(forumProxyPlaceholderRE, forumProxy);
};

/* eslint-disable max-len */
const template = `#api redirect

/internal/*                                   #{{API}}/internal/:splat

# auth redirects
/signup                                       /signin 301
/email-signin                                 /signin 301
/login                                        /signin 301
/deprecated-signin                            /signin 301
/logout                                       /signout 301
/passwordless-change                          /confirm-email 301

# certification redirects
/:username/front-end-certification            /certification/:username/legacy-front-end 301
/:username/data-visualization-certification   /certification/:username/legacy-data-visualization 301
/:username/back-end-certification             /certification/:username/legacy-back-end 301
/:username/full-stack-certification           /certification/:username/full-stack 301

# unsunscribe redirects
/u/*                                          #{{API}}/u/:splat
/unsunscribe/*                                #{{API}}/unsunscribe/:splat
/ue/*                                         #{{API}}/ue/:splat

# misc redirects
/agile                                        / 200
/chat                                         https://gitter.im/FreeCodeCamp/FreeCodeCamp 301
/twitch                                       https://twitch.tv/freecodecamp 301
/nonprofits-form                              / 200
/pmi-acp-agile-project-managers               / 200
/pmi-acp-agile-project-managers-form          / 200
/stories                                      / 200
/all-stories                                  / 200
/field-guide/*                                #{{FORUM}} 301
/learn-to-code                                /learn 200
/map                                          /learn 200
/forum/*                                      #{{FORUM_PROXY}} 200
/privacy                                      #{{HOME}}/forum/t/free-code-camp-privacy-policy/19545 301
/nonprofit-project-instructions               #{{HOME}}/forum/t/how-free-code-camps-nonprofits-projects-work/19547 301
/how-nonprofit-projects-work                  https://medium.freecodecamp.org/open-source-for-good-1a0ea9f32d5a 301

`;
/* eslint-enable max-len */