/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-â
âvi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8                                :viâ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¡
â Copyright 2021 Justine Alexandra Roberts Tunney                              â
â                                                                              â
â Permission to use, copy, modify, and/or distribute this software for         â
â any purpose with or without fee is hereby granted, provided that the         â
â above copyright notice and this permission notice appear in all copies.      â
â                                                                              â
â THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL                â
â WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED                â
â WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE             â
â AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL         â
â DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR        â
â PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER               â
â TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR             â
â PERFORMANCE OF THIS SOFTWARE.                                                â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ*/
#include "libc/macros.internal.h"
#include "third_party/maxmind/maxminddb.h"

const struct thatispacked MetroName {
  short code;
  const char *name;
} kMetroNames[] = {
    {500, "Portland-Auburn ME"},
    {501, "New York NY"},
    {502, "Binghamton NY"},
    {503, "Macon GA"},
    {504, "Philadelphia PA"},
    {505, "Detroit MI"},
    {506, "Boston MA-Manchester NH"},
    {507, "Savannah GA"},
    {508, "Pittsburgh PA"},
    {509, "Ft. Wayne IN"},
    {510, "Cleveland-Akron (Canton) OH"},
    {511, "Washington DC (Hagerstown MD)"},
    {512, "Baltimore MD"},
    {513, "Flint-Saginaw-Bay City MI"},
    {514, "Buffalo NY"},
    {515, "Cincinnati OH"},
    {516, "Erie PA"},
    {517, "Charlotte NC"},
    {518, "Greensboro-High Point-Winston Salem NC"},
    {519, "Charleston SC"},
    {520, "Augusta GA"},
    {521, "Providence RI-New Bedford MA"},
    {522, "Columbus GA"},
    {523, "Burlington VT-Plattsburgh NY"},
    {524, "Atlanta GA"},
    {525, "Albany GA"},
    {526, "Utica NY"},
    {527, "Indianapolis IN"},
    {528, "Miami-Ft. Lauderdale FL"},
    {529, "Louisville KY"},
    {530, "Tallahassee FL-Thomasville GA"},
    {531, "Tri-Cities TN-VA"},
    {532, "Albany-Schenectady-Troy NY"},
    {533, "Hartford & New Haven CT"},
    {534, "Orlando-Daytona Beach-Melbourne FL"},
    {535, "Columbus OH"},
    {536, "Youngstown OH"},
    {537, "Bangor ME"},
    {538, "Rochester NY"},
    {539, "Tampa-St. Petersburg (Sarasota) FL"},
    {540, "Traverse City-Cadillac MI"},
    {541, "Lexington KY"},
    {542, "Dayton OH"},
    {543, "Springfield-Holyoke MA"},
    {544, "Norfolk-Portsmouth-Newport News VA"},
    {545, "Greenville-New Bern-Washington NC"},
    {546, "Columbia SC"},
    {547, "Toledo OH"},
    {548, "West Palm Beach-Ft. Pierce FL"},
    {549, "Watertown NY"},
    {550, "Wilmington NC"},
    {551, "Lansing MI"},
    {552, "Presque Isle ME"},
    {553, "Marquette MI"},
    {554, "Wheeling WV-Steubenville OH"},
    {555, "Syracuse NY"},
    {556, "Richmond-Petersburg VA"},
    {557, "Knoxville TN"},
    {558, "Lima OH"},
    {559, "Bluefield-Beckley-Oak Hill WV"},
    {560, "Raleigh-Durham (Fayetteville) NC"},
    {561, "Jacksonville FL"},
    {563, "Grand Rapids-Kalamazoo-Battle Creek MI"},
    {564, "Charleston-Huntington WV"},
    {565, "Elmira NY"},
    {566, "Harrisburg-Lancaster-Lebanon-York PA"},
    {567, "Greenville-Spartanburg SC-Asheville NC-Anderson SC"},
    {569, "Harrisonburg VA"},
    {570, "Florence-Myrtle Beach SC"},
    {571, "Ft. Myers-Naples FL"},
    {573, "Roanoke-Lynchburg VA"},
    {574, "Johnstown-Altoona PA"},
    {575, "Chattanooga TN"},
    {576, "Salisbury MD"},
    {577, "Wilkes Barre-Scranton PA"},
    {581, "Terre Haute IN"},
    {582, "Lafayette IN"},
    {583, "Alpena MI"},
    {584, "Charlottesville VA"},
    {588, "South Bend-Elkhart IN"},
    {592, "Gainesville FL"},
    {596, "Zanesville OH"},
    {597, "Parkersburg WV"},
    {598, "Clarksburg-Weston WV"},
    {600, "Corpus Christi TX"},
    {602, "Chicago IL"},
    {603, "Joplin MO-Pittsburg KS"},
    {604, "Columbia-Jefferson City MO"},
    {605, "Topeka KS"},
    {606, "Dothan AL"},
    {609, "St. Louis MO"},
    {610, "Rockford IL"},
    {611, "Rochester MN-Mason City IA-Austin MN"},
    {612, "Shreveport LA"},
    {613, "Minneapolis-St. Paul MN"},
    {616, "Kansas City MO"},
    {617, "Milwaukee WI"},
    {618, "Houston TX"},
    {619, "Springfield MO"},
    {622, "New Orleans LA"},
    {623, "Dallas-Ft. Worth TX"},
    {624, "Sioux City IA"},
    {625, "Waco-Temple-Bryan TX"},
    {626, "Victoria TX"},
    {627, "Wichita Falls TX & Lawton OK"},
    {628, "Monroe LA-El Dorado AR"},
    {630, "Birmingham AL"},
    {631, "Ottumwa IA-Kirksville MO"},
    {632, "Paducah KY-Cape Girardeau MO-Harrisburg-Mount Vernon IL"},
    {633, "Odessa-Midland TX"},
    {634, "Amarillo TX"},
    {635, "Austin TX"},
    {636, "Harlingen-Weslaco-Brownsville-McAllen TX"},
    {637, "Cedar Rapids-Waterloo-Iowa City & Dubuque IA"},
    {638, "St. Joseph MO"},
    {639, "Jackson TN"},
    {640, "Memphis TN"},
    {641, "San Antonio TX"},
    {642, "Lafayette LA"},
    {643, "Lake Charles LA"},
    {644, "Alexandria LA"},
    {647, "Greenwood-Greenville MS"},
    {648, "Champaign & Springfield-Decatur,IL"},
    {649, "Evansville IN"},
    {650, "Oklahoma City OK"},
    {651, "Lubbock TX"},
    {652, "Omaha NE"},
    {656, "Panama City FL"},
    {657, "Sherman TX-Ada OK"},
    {658, "Green Bay-Appleton WI"},
    {659, "Nashville TN"},
    {661, "San Angelo TX"},
    {662, "Abilene-Sweetwater TX"},
    {669, "Madison WI"},
    {670, "Ft. Smith-Fayetteville-Springdale-Rogers AR"},
    {671, "Tulsa OK"},
    {673, "Columbus-Tupelo-West Point MS"},
    {675, "Peoria-Bloomington IL"},
    {676, "Duluth MN-Superior WI"},
    {678, "Wichita-Hutchinson KS"},
    {679, "Des Moines-Ames IA"},
    {682, "Davenport IA-Rock Island-Moline IL"},
    {686, "Mobile AL-Pensacola (Ft. Walton Beach) FL"},
    {687, "Minot-Bismarck-Dickinson(Williston) ND"},
    {691, "Huntsville-Decatur (Florence) AL"},
    {692, "Beaumont-Port Arthur TX"},
    {693, "Little Rock-Pine Bluff AR"},
    {698, "Montgomery (Selma) AL"},
    {702, "La Crosse-Eau Claire WI"},
    {705, "Wausau-Rhinelander WI"},
    {709, "Tyler-Longview(Lufkin & Nacogdoches) TX"},
    {710, "Hattiesburg-Laurel MS"},
    {711, "Meridian MS"},
    {716, "Baton Rouge LA"},
    {717, "Quincy IL-Hannibal MO-Keokuk IA"},
    {718, "Jackson MS"},
    {722, "Lincoln & Hastings-Kearney NE"},
    {724, "Fargo-Valley City ND"},
    {725, "Sioux Falls(Mitchell) SD"},
    {734, "Jonesboro AR"},
    {736, "Bowling Green KY"},
    {737, "Mankato MN"},
    {740, "North Platte NE"},
    {743, "Anchorage AK"},
    {744, "Honolulu HI"},
    {745, "Fairbanks AK"},
    {746, "Biloxi-Gulfport MS"},
    {747, "Juneau AK"},
    {749, "Laredo TX"},
    {751, "Denver CO"},
    {752, "Colorado Springs-Pueblo CO"},
    {753, "Phoenix AZ"},
    {754, "Butte-Bozeman MT"},
    {755, "Great Falls MT"},
    {756, "Billings MT"},
    {757, "Boise ID"},
    {758, "Idaho Falls-Pocatello ID"},
    {759, "Cheyenne WY-Scottsbluff NE"},
    {760, "Twin Falls ID"},
    {762, "Missoula MT"},
    {764, "Rapid City SD"},
    {765, "El Paso TX"},
    {766, "Helena MT"},
    {767, "Casper-Riverton WY"},
    {770, "Salt Lake City UT"},
    {771, "Yuma AZ-El Centro CA"},
    {773, "Grand Junction-Montrose CO"},
    {789, "Tucson (Sierra Vista) AZ"},
    {790, "Albuquerque-Santa Fe NM"},
    {798, "Glendive MT"},
    {800, "Bakersfield CA"},
    {801, "Eugene OR"},
    {802, "Eureka CA"},
    {803, "Los Angeles CA"},
    {804, "Palm Springs CA"},
    {807, "San Francisco-Oakland-San Jose CA"},
    {810, "Yakima-Pasco-Richland-Kennewick WA"},
    {811, "Reno NV"},
    {813, "Medford-Klamath Falls OR"},
    {819, "Seattle-Tacoma WA"},
    {820, "Portland OR"},
    {821, "Bend OR"},
    {825, "San Diego CA"},
    {828, "Monterey-Salinas CA"},
    {839, "Las Vegas NV"},
    {855, "Santa Barbara-Santa Maria-San Luis Obispo CA"},
    {862, "Sacramento-Stockton-Modesto CA"},
    {866, "Fresno-Visalia CA"},
    {868, "Chico-Redding CA"},
    {881, "Spokane WA"},
};

/**
 * Returns U.S. Metropolitan Area name.
 * @see Google Adwords c. 2010
 */
const char *GetMetroName(int code) {
  int m, l, r;
  l = 0;
  r = ARRAYLEN(kMetroNames) - 1;
  while (l <= r) {
    m = (l + r) >> 1;
    if (kMetroNames[m].code < code) {
      l = m + 1;
    } else if (kMetroNames[m].code > code) {
      r = m - 1;
    } else {
      return kMetroNames[m].name;
    }
  }
  return 0;
}
