CREATE OR REPLACE FUNCTION google_search_console.extract_url_locale(url STRING)
RETURNS STRING AS (
  IF(
    REGEXP_CONTAINS(
      google_search_console.extract_url_path_segment(url, 1),
      r'^[a-zA-Z]{2}-[a-zA-Z]{2}$'
    )
    OR LOWER(google_search_console.extract_url_path_segment(url, 1)) IN (
      'aa',
      'ab',
      'ae',
      'af',
      'ak',
      'am',
      'an',
      'ar',
      'as',
      'av',
      'ay',
      'az',
      'ba',
      'be',
      'bg',
      'bh',
      'bi',
      'bm',
      'bn',
      'bo',
      'br',
      'bs',
      'ca',
      'ce',
      'ch',
      'co',
      'cr',
      'cs',
      'cu',
      'cv',
      'cy',
      'da',
      'de',
      'dv',
      'dz',
      'ee',
      'el',
      'en',
      'eo',
      'es',
      'et',
      'eu',
      'fa',
      'ff',
      'fi',
      'fj',
      'fo',
      'fr',
      'fy',
      'ga',
      'gd',
      'gl',
      'gn',
      'gu',
      'gv',
      'ha',
      'he',
      'hi',
      'ho',
      'hr',
      'ht',
      'hu',
      'hy',
      'hz',
      'ia',
      'id',
      'ie',
      'ig',
      'ii',
      'ik',
      'io',
      'is',
      'it',
      'iu',
      'ja',
      'jv',
      'ka',
      'kg',
      'ki',
      'kj',
      'kk',
      'kl',
      'km',
      'kn',
      'ko',
      'kr',
      'ks',
      'ku',
      'kv',
      'kw',
      'ky',
      'la',
      'lb',
      'lg',
      'li',
      'ln',
      'lo',
      'lt',
      'lu',
      'lv',
      'mg',
      'mh',
      'mi',
      'mk',
      'ml',
      'mn',
      'mr',
      'ms',
      'mt',
      'my',
      'na',
      'nb',
      'nd',
      'ne',
      'ng',
      'nl',
      'nn',
      'no',
      'nr',
      'nv',
      'ny',
      'oc',
      'oj',
      'om',
      'or',
      'os',
      'pa',
      'pi',
      'pl',
      'ps',
      'pt',
      'qu',
      'rm',
      'rn',
      'ro',
      'ru',
      'rw',
      'sa',
      'sc',
      'sd',
      'se',
      'sg',
      'si',
      'sk',
      'sl',
      'sm',
      'sn',
      'so',
      'sq',
      'sr',
      'ss',
      'st',
      'su',
      'sv',
      'sw',
      'ta',
      'te',
      'tg',
      'th',
      'ti',
      'tk',
      'tl',
      'tn',
      'to',
      'tr',
      'ts',
      'tt',
      'tw',
      'ty',
      'ug',
      'uk',
      'ur',
      'uz',
      've',
      'vi',
      'vo',
      'wa',
      'wo',
      'xh',
      'yi',
      'yo',
      'za',
      'zh',
      'zu'
    ),
    google_search_console.extract_url_path_segment(url, 1),
    NULL
  )
);

SELECT
  assert.equals(
    google_search_console.extract_url_locale('https://www.mozilla.org/en-US/firefox/'),
    'en-US'
  ),
  assert.equals(
    google_search_console.extract_url_locale('https://www.mozilla.org/en-us/firefox/'),
    'en-us'
  ),
  assert.equals(google_search_console.extract_url_locale('https://support.mozilla.org/es/'), 'es'),
  assert.equals(
    google_search_console.extract_url_locale('https://blog.mozilla.org/ux/'),
    CAST(NULL AS STRING)
  ),
  assert.equals(
    google_search_console.extract_url_locale('https://www.mozilla.org/'),
    CAST(NULL AS STRING)
  ),
