const githubRegex = /github/i;
const providerHash = {
  facebook: ({ id }) => id,
  github: ({ username }) => username,
  twitter: ({ username }) => username,
  linkedin({ _json }) {
    return (_json && _json.publicProfileUrl) || null;
  },
  google: ({ id }) => id
};

export function getUsernameFromProvider(provider, profile) {
  return typeof providerHash[provider] === 'function'
    ? providerHash[provider](profile)
    : null;
}

// createProfileAttributes(provider: String, profile: {}) => Object
export function createUserUpdatesFromProfile(provider, profile) {
  if (githubRegex.test(provider)) {
    return createProfileAttributesFromGithub(profile);
  }
  return {
    [getSocialProvider(provider)]: getUsernameFromProvider(
      getSocialProvider(provider),
      profile
    )
  };
}
// createProfileAttributes(profile) => profileUpdate
function createProfileAttributesFromGithub(profile) {
  const {
    profileUrl: githubProfile,
    username,
    _json: { avatar_url: picture, blog: website, location, bio, name } = {}
  } = profile;
  return {
    name,
    username: username.toLowerCase(),
    location,
    bio,
    website,
    picture,
    githubProfile
  };
}

export function getSocialProvider(provider) {
  return provider.split('-')[0];
}