use crate::data::caniuse::region::RegionData;
const KEYS: &[&str] = &[
"AD", "AE", "AF", "AG", "AI", "AL", "AM", "AO", "AR", "AS", "AT", "AU", "AW", "AX", "AZ", "BA",
"BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BW", "BY",
"BZ", "CA", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU", "CV", "CX",
"CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "ER", "ES", "ET", "FI", "FJ",
"FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", "GM", "GN", "GP",
"GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN",
"IQ", "IR", "IS", "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR",
"KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC",
"MD", "ME", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV",
"MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ",
"OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY", "QA",
"RE", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SK", "SL", "SM",
"SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TG", "TH", "TJ", "TL", "TM", "TN", "TO",
"TR", "TT", "TV", "TW", "TZ", "UA", "UG", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN",
"VU", "WF", "WS", "YE", "YT", "ZA", "ZM", "ZW", "alt-af", "alt-an", "alt-as", "alt-eu",
"alt-na", "alt-oc", "alt-sa", "alt-ww",
];
const BROWSER_RANGES: &[u32] = &[
0u32, 174u32, 396u32, 651u32, 821u32, 970u32, 1193u32, 1404u32, 1665u32, 1874u32, 1994u32,
2259u32, 2498u32, 2661u32, 2802u32, 3009u32, 3227u32, 3418u32, 3635u32, 3880u32, 4103u32,
4341u32, 4553u32, 4775u32, 5009u32, 5122u32, 5327u32, 5523u32, 5742u32, 5891u32, 6095u32,
6311u32, 6525u32, 6712u32, 6969u32, 7200u32, 7367u32, 7586u32, 7833u32, 8074u32, 8201u32,
8424u32, 8699u32, 8966u32, 9190u32, 9380u32, 9711u32, 9911u32, 9976u32, 10170u32, 10410u32,
10693u32, 10855u32, 11041u32, 11204u32, 11427u32, 11687u32, 11909u32, 12096u32, 12344u32,
12469u32, 12712u32, 12974u32, 13200u32, 13394u32, 13499u32, 13616u32, 13760u32, 14017u32,
14244u32, 14479u32, 14649u32, 14889u32, 15075u32, 15214u32, 15477u32, 15621u32, 15767u32,
16017u32, 16248u32, 16439u32, 16637u32, 16840u32, 17029u32, 17198u32, 17351u32, 17536u32,
17794u32, 18007u32, 18212u32, 18455u32, 18672u32, 18891u32, 19107u32, 19339u32, 19496u32,
19705u32, 19904u32, 20150u32, 20333u32, 20578u32, 20728u32, 20908u32, 21094u32, 21352u32,
21562u32, 21731u32, 21916u32, 22044u32, 22202u32, 22365u32, 22437u32, 22651u32, 22849u32,
22994u32, 23199u32, 23373u32, 23588u32, 23769u32, 23916u32, 24090u32, 24309u32, 24477u32,
24727u32, 24943u32, 25142u32, 25380u32, 25637u32, 25791u32, 25983u32, 26186u32, 26443u32,
26543u32, 26756u32, 26969u32, 27176u32, 27424u32, 27633u32, 27750u32, 27949u32, 28148u32,
28242u32, 28443u32, 28633u32, 28807u32, 29037u32, 29263u32, 29489u32, 29733u32, 29950u32,
30141u32, 30356u32, 30431u32, 30677u32, 30865u32, 31117u32, 31339u32, 31520u32, 31606u32,
31684u32, 31884u32, 32092u32, 32285u32, 32497u32, 32678u32, 32889u32, 33075u32, 33309u32,
33540u32, 33659u32, 33725u32, 33920u32, 34118u32, 34330u32, 34435u32, 34635u32, 34826u32,
35029u32, 35243u32, 35484u32, 35744u32, 35970u32, 36182u32, 36355u32, 36609u32, 36801u32,
37023u32, 37230u32, 37309u32, 37516u32, 37721u32, 37958u32, 38094u32, 38312u32, 38513u32,
38672u32, 38804u32, 38999u32, 39236u32, 39414u32, 39571u32, 39757u32, 40005u32, 40191u32,
40432u32, 40680u32, 40819u32, 41041u32, 41174u32, 41409u32, 41606u32, 41699u32, 41934u32,
42178u32, 42428u32, 42670u32, 42926u32, 43123u32, 43313u32, 43412u32, 43574u32, 43772u32,
43954u32, 44112u32, 44285u32, 44434u32, 44525u32, 44678u32, 44863u32, 45025u32, 45256u32,
45474u32, 45717u32, 45926u32, 46024u32, 46250u32, 46480u32, 46712u32, 46919u32, 47112u32,
47345u32,
];
const VERSION_RANGES: &[u32] = &[
0u32, 212u32, 502u32, 846u32, 1056u32, 1246u32, 1539u32, 1808u32, 2169u32, 2435u32, 2583u32,
2927u32, 3233u32, 3432u32, 3609u32, 3879u32, 4163u32, 4426u32, 4706u32, 5018u32, 5332u32,
5642u32, 5927u32, 6221u32, 6533u32, 6674u32, 6938u32, 7191u32, 7478u32, 7660u32, 7918u32,
8202u32, 8474u32, 8710u32, 9044u32, 9354u32, 9575u32, 9872u32, 10192u32, 10507u32, 10668u32,
10961u32, 11332u32, 11678u32, 11974u32, 12210u32, 12656u32, 12918u32, 13006u32, 13244u32,
13552u32, 13921u32, 14127u32, 14355u32, 14570u32, 14865u32, 15223u32, 15517u32, 15745u32,
16079u32, 16234u32, 16546u32, 16903u32, 17194u32, 17435u32, 17569u32, 17718u32, 17894u32,
18222u32, 18526u32, 18830u32, 19053u32, 19370u32, 19607u32, 19779u32, 20124u32, 20302u32,
20488u32, 20842u32, 21149u32, 21387u32, 21646u32, 21900u32, 22132u32, 22343u32, 22543u32,
22784u32, 23115u32, 23397u32, 23655u32, 23983u32, 24266u32, 24547u32, 24831u32, 25116u32,
25311u32, 25595u32, 25859u32, 26166u32, 26391u32, 26706u32, 26894u32, 27124u32, 27360u32,
27695u32, 27970u32, 28179u32, 28404u32, 28567u32, 28778u32, 28988u32, 29084u32, 29361u32,
29605u32, 29784u32, 30049u32, 30267u32, 30544u32, 30776u32, 30954u32, 31171u32, 31458u32,
31670u32, 31995u32, 32261u32, 32507u32, 32824u32, 33163u32, 33356u32, 33598u32, 33861u32,
34210u32, 34339u32, 34615u32, 34898u32, 35161u32, 35486u32, 35745u32, 35894u32, 36143u32,
36406u32, 36528u32, 36778u32, 37020u32, 37231u32, 37542u32, 37839u32, 38138u32, 38461u32,
38740u32, 38982u32, 39276u32, 39376u32, 39703u32, 39943u32, 40271u32, 40552u32, 40774u32,
40887u32, 40991u32, 41233u32, 41497u32, 41738u32, 42014u32, 42239u32, 42508u32, 42737u32,
43049u32, 43346u32, 43495u32, 43584u32, 43824u32, 44076u32, 44351u32, 44484u32, 44753u32,
44989u32, 45239u32, 45521u32, 45827u32, 46176u32, 46478u32, 46741u32, 46958u32, 47287u32,
47547u32, 47836u32, 48102u32, 48205u32, 48461u32, 48716u32, 49033u32, 49206u32, 49499u32,
49773u32, 49980u32, 50161u32, 50408u32, 50735u32, 50964u32, 51163u32, 51402u32, 51740u32,
51969u32, 52295u32, 52619u32, 52798u32, 53097u32, 53265u32, 53581u32, 53847u32, 53968u32,
54256u32, 54584u32, 54915u32, 55239u32, 55567u32, 55820u32, 56066u32, 56194u32, 56408u32,
56666u32, 56897u32, 57098u32, 57312u32, 57497u32, 57615u32, 57804u32, 58054u32, 58263u32,
58569u32, 58862u32, 59183u32, 59460u32, 59586u32, 59881u32, 60179u32, 60476u32, 60745u32,
61005u32, 61307u32,
];
const PERCENT_RANGES: &[u32] = &[
0u32, 368u32, 822u32, 1331u32, 1681u32, 1998u32, 2471u32, 2918u32, 3479u32, 3908u32, 4165u32,
4710u32, 5206u32, 5540u32, 5831u32, 6260u32, 6706u32, 7099u32, 7541u32, 8044u32, 8484u32,
8964u32, 9414u32, 9853u32, 10323u32, 10562u32, 10991u32, 11392u32, 11841u32, 12158u32,
12570u32, 13013u32, 13468u32, 13857u32, 14389u32, 14848u32, 15179u32, 15630u32, 16143u32,
16631u32, 16890u32, 17352u32, 17904u32, 18466u32, 18914u32, 19318u32, 19982u32, 20395u32,
20461u32, 20860u32, 21344u32, 21927u32, 22252u32, 22636u32, 22970u32, 23447u32, 23979u32,
24436u32, 24821u32, 25326u32, 25559u32, 26054u32, 26558u32, 27029u32, 27423u32, 27642u32,
27881u32, 28194u32, 28725u32, 29191u32, 29678u32, 30029u32, 30534u32, 30917u32, 31208u32,
31743u32, 32045u32, 32346u32, 32856u32, 33321u32, 33718u32, 34106u32, 34521u32, 34905u32,
35260u32, 35560u32, 35945u32, 36486u32, 36931u32, 37345u32, 37836u32, 38276u32, 38727u32,
39172u32, 39647u32, 39982u32, 40392u32, 40790u32, 41297u32, 41681u32, 42183u32, 42501u32,
42887u32, 43275u32, 43802u32, 44232u32, 44583u32, 44962u32, 45225u32, 45539u32, 45882u32,
46011u32, 46442u32, 46847u32, 47153u32, 47590u32, 47942u32, 48395u32, 48768u32, 49083u32,
49425u32, 49861u32, 50196u32, 50708u32, 51160u32, 51568u32, 52047u32, 52579u32, 52905u32,
53310u32, 53727u32, 54239u32, 54436u32, 54870u32, 55305u32, 55730u32, 56251u32, 56685u32,
56921u32, 57332u32, 57739u32, 57926u32, 58342u32, 58726u32, 59083u32, 59539u32, 60016u32,
60485u32, 60972u32, 61408u32, 61798u32, 62218u32, 62377u32, 62871u32, 63261u32, 63782u32,
64244u32, 64615u32, 64786u32, 64945u32, 65363u32, 65796u32, 66200u32, 66629u32, 66995u32,
67412u32, 67793u32, 68269u32, 68761u32, 69018u32, 69153u32, 69558u32, 69952u32, 70384u32,
70594u32, 71007u32, 71396u32, 71817u32, 72249u32, 72734u32, 73266u32, 73720u32, 74154u32,
74497u32, 75022u32, 75394u32, 75875u32, 76310u32, 76464u32, 76887u32, 77303u32, 77774u32,
78048u32, 78497u32, 78895u32, 79226u32, 79486u32, 79891u32, 80375u32, 80733u32, 81067u32,
81432u32, 81943u32, 82320u32, 82801u32, 83303u32, 83582u32, 84040u32, 84312u32, 84798u32,
85206u32, 85396u32, 85877u32, 86364u32, 86888u32, 87370u32, 87904u32, 88315u32, 88707u32,
88904u32, 89242u32, 89649u32, 90028u32, 90362u32, 90726u32, 91025u32, 91218u32, 91531u32,
91892u32, 92220u32, 92686u32, 93118u32, 93602u32, 94026u32, 94222u32, 94699u32, 95167u32,
95646u32, 96071u32, 96463u32, 96957u32,
];
pub fn get_usage_by_region(region: &str) -> Option<RegionData> {
let index = KEYS.binary_search(®ion).ok()?;
let browser_start = BROWSER_RANGES[index];
let browser_end = BROWSER_RANGES[index + 1];
let version_start = VERSION_RANGES[index];
let version_end = VERSION_RANGES[index + 1];
let percent_start = PERCENT_RANGES[index];
let percent_end = PERCENT_RANGES[index + 1];
Some(RegionData::new(
browser_start,
browser_end,
version_start,
version_end,
percent_start,
percent_end,
))
}