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

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

const urlRegex = regexSupplant(
  '(' + // $1 total match
    '(#{validUrlPrecedingChars})' + // $2 Preceeding chracter
    '(' + // $3 URL
    '(https?:\\/\\/)' + // $4 Protocol (optional) <-- THIS IS THE DIFFERENCE, MISSING '?' AFTER PROTOCOL
    '(#{validDomain})' + // $5 Domain(s)
    '(?::(#{validPortNumber}))?' + // $6 Port number (optional)
    '(\\/#{validUrlPath}*)?' + // $7 URL Path
    '(\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?' + // $8 Query String
    ')' +
    ')',
  {
    validUrlPrecedingChars,
    validDomain,
    validPortNumber,
    validUrlPath,
    validUrlQueryChars,
    validUrlQueryEndingChars,
  },
  'gi',
);

const filePath = 'src/data/url-regex.json';
fs.writeFile(
  filePath,
  JSON.stringify({
    source: urlRegex.source,
    flags: urlRegex.flags,
  }),
  (err) => {
    if (err) {
      console.error(err);
    }
    console.log(`Wrote ${filePath}`);
  },
);