import regexSupplant from 'twitter-text/dist/lib/regexSupplant';
import validUrlPrecedingChars from 'twitter-text/dist/regexp/validUrlPrecedingChars';
import validDomain from 'twitter-text/dist/regexp/validDomain';
import validPortNumber from 'twitter-text/dist/regexp/validPortNumber';
import validUrlPath from 'twitter-text/dist/regexp/validUrlPath';
import validUrlQueryChars from 'twitter-text/dist/regexp/validUrlQueryChars';
import validUrlQueryEndingChars from 'twitter-text/dist/regexp/validUrlQueryEndingChars';

// The difference with twitter-text's extractURL is that the protocol isn't
// optional.

export const urlRegex = regexSupplant(
  '('                                                          + // $1 URL
    '(#{validUrlPrecedingChars})'                              + // $2
    '(https?:\\/\\/)'                                          + // $3 Protocol
    '(#{validDomain})'                                         + // $4 Domain(s)
    '(?::(#{validPortNumber}))?'                               + // $5 Port number (optional)
    '(\\/#{validUrlPath}*)?'                                   + // $6 URL Path
    '(\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?'  + // $7 Query String
  ')',
  {
    validUrlPrecedingChars,
    validDomain,
    validPortNumber,
    validUrlPath,
    validUrlQueryChars,
    validUrlQueryEndingChars,
  },
  'gi',
);