/*
 * Copyright 2017 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "cros-camera/timezone.h"

#include <stddef.h>
#include <string.h>

#include <iterator>
#include <map>

#include <base/files/file_util.h>
#include <base/strings/utf_string_conversions.h>

#include "cros-camera/common.h"

namespace cros {

namespace {

const char kTimeZoneFilePath[] = "/etc/localtime";
const char kZoneInfoFilePath[] = "/usr/share/zoneinfo/";

class TimezoneMap {
 public:
  TimezoneMap(const TimezoneMap&) = delete;
  TimezoneMap& operator=(const TimezoneMap&) = delete;
  static TimezoneMap* GetInstance() {
    // TODO(shik): change to base::NoDestructor after libchrome uprev.
    static TimezoneMap* instance = new TimezoneMap();
    return instance;
  }

  std::string CountryCodeForTimezone(const std::string& olson_code) {
    std::map<const char*, const char*, CompareCStrings>::iterator iter =
        map_.find(olson_code.c_str());
    if (iter != map_.end())
      return iter->second;

    return std::string();
  }

 private:
  TimezoneMap() {
    // These mappings are adapted from zone.tab, which is available at
    // <http://www.ietf.org/timezones/data/zone.tab> and is a part of public
    // domain.
    struct OlsonCodeData {
      const char* country_code;
      const char* olson_code;
    };
    static const OlsonCodeData olson_code_data[] = {
        {"AD", "Europe/Andorra"},
        {"AE", "Asia/Dubai"},
        {"AF", "Asia/Kabul"},
        {"AG", "America/Antigua"},
        {"AI", "America/Anguilla"},
        {"AL", "Europe/Tirane"},
        {"AM", "Asia/Yerevan"},
        {"AO", "Africa/Luanda"},
        {"AQ", "Antarctica/McMurdo"},
        {"AQ", "Antarctica/Rothera"},
        {"AQ", "Antarctica/Palmer"},
        {"AQ", "Antarctica/Mawson"},
        {"AQ", "Antarctica/Davis"},
        {"AQ", "Antarctica/Casey"},
        {"AQ", "Antarctica/Vostok"},
        {"AQ", "Antarctica/DumontDUrville"},
        {"AQ", "Antarctica/Syowa"},
        {"AR", "America/Argentina/Buenos_Aires"},
        {"AR", "America/Argentina/Cordoba"},
        {"AR", "America/Argentina/Salta"},
        {"AR", "America/Argentina/Jujuy"},
        {"AR", "America/Argentina/Tucuman"},
        {"AR", "America/Argentina/Catamarca"},
        {"AR", "America/Argentina/La_Rioja"},
        {"AR", "America/Argentina/San_Juan"},
        {"AR", "America/Argentina/Mendoza"},
        {"AR", "America/Argentina/San_Luis"},
        {"AR", "America/Argentina/Rio_Gallegos"},
        {"AR", "America/Argentina/Ushuaia"},
        {"AS", "Pacific/Pago_Pago"},
        {"AT", "Europe/Vienna"},
        {"AU", "Australia/Lord_Howe"},
        {"AU", "Antarctica/Macquarie"},
        {"AU", "Australia/Hobart"},
        {"AU", "Australia/Currie"},
        {"AU", "Australia/Melbourne"},
        {"AU", "Australia/Sydney"},
        {"AU", "Australia/Broken_Hill"},
        {"AU", "Australia/Brisbane"},
        {"AU", "Australia/Lindeman"},
        {"AU", "Australia/Adelaide"},
        {"AU", "Australia/Darwin"},
        {"AU", "Australia/Perth"},
        {"AU", "Australia/Eucla"},
        {"AW", "America/Aruba"},
        {"AX", "Europe/Mariehamn"},
        {"AZ", "Asia/Baku"},
        {"BA", "Europe/Sarajevo"},
        {"BB", "America/Barbados"},
        {"BD", "Asia/Dhaka"},
        {"BE", "Europe/Brussels"},
        {"BF", "Africa/Ouagadougou"},
        {"BG", "Europe/Sofia"},
        {"BH", "Asia/Bahrain"},
        {"BI", "Africa/Bujumbura"},
        {"BJ", "Africa/Porto-Novo"},
        {"BL", "America/St_Barthelemy"},
        {"BM", "Atlantic/Bermuda"},
        {"BN", "Asia/Brunei"},
        {"BO", "America/La_Paz"},
        {"BQ", "America/Kralendijk"},
        {"BR", "America/Noronha"},
        {"BR", "America/Belem"},
        {"BR", "America/Fortaleza"},
        {"BR", "America/Recife"},
        {"BR", "America/Araguaina"},
        {"BR", "America/Maceio"},
        {"BR", "America/Bahia"},
        {"BR", "America/Sao_Paulo"},
        {"BR", "America/Campo_Grande"},
        {"BR", "America/Cuiaba"},
        {"BR", "America/Santarem"},
        {"BR", "America/Porto_Velho"},
        {"BR", "America/Boa_Vista"},
        {"BR", "America/Manaus"},
        {"BR", "America/Eirunepe"},
        {"BR", "America/Rio_Branco"},
        {"BS", "America/Nassau"},
        {"BT", "Asia/Thimphu"},
        {"BW", "Africa/Gaborone"},
        {"BY", "Europe/Minsk"},
        {"BZ", "America/Belize"},
        {"CA", "America/St_Johns"},
        {"CA", "America/Halifax"},
        {"CA", "America/Glace_Bay"},
        {"CA", "America/Moncton"},
        {"CA", "America/Goose_Bay"},
        {"CA", "America/Blanc-Sablon"},
        {"CA", "America/Toronto"},
        {"CA", "America/Nipigon"},
        {"CA", "America/Thunder_Bay"},
        {"CA", "America/Iqaluit"},
        {"CA", "America/Pangnirtung"},
        {"CA", "America/Resolute"},
        {"CA", "America/Atikokan"},
        {"CA", "America/Rankin_Inlet"},
        {"CA", "America/Winnipeg"},
        {"CA", "America/Rainy_River"},
        {"CA", "America/Regina"},
        {"CA", "America/Swift_Current"},
        {"CA", "America/Edmonton"},
        {"CA", "America/Cambridge_Bay"},
        {"CA", "America/Yellowknife"},
        {"CA", "America/Inuvik"},
        {"CA", "America/Creston"},
        {"CA", "America/Dawson_Creek"},
        {"CA", "America/Vancouver"},
        {"CA", "America/Whitehorse"},
        {"CA", "America/Dawson"},
        {"CC", "Indian/Cocos"},
        {"CD", "Africa/Kinshasa"},
        {"CD", "Africa/Lubumbashi"},
        {"CF", "Africa/Bangui"},
        {"CG", "Africa/Brazzaville"},
        {"CH", "Europe/Zurich"},
        {"CI", "Africa/Abidjan"},
        {"CK", "Pacific/Rarotonga"},
        {"CL", "America/Santiago"},
        {"CL", "Pacific/Easter"},
        {"CM", "Africa/Douala"},
        {"CN", "Asia/Shanghai"},
        {"CN", "Asia/Harbin"},
        {"CN", "Asia/Chongqing"},
        {"CN", "Asia/Urumqi"},
        {"CN", "Asia/Kashgar"},
        {"CO", "America/Bogota"},
        {"CR", "America/Costa_Rica"},
        {"CU", "America/Havana"},
        {"CV", "Atlantic/Cape_Verde"},
        {"CW", "America/Curacao"},
        {"CX", "Indian/Christmas"},
        {"CY", "Asia/Nicosia"},
        {"CZ", "Europe/Prague"},
        {"DE", "Europe/Berlin"},
        {"DE", "Europe/Busingen"},
        {"DJ", "Africa/Djibouti"},
        {"DK", "Europe/Copenhagen"},
        {"DM", "America/Dominica"},
        {"DO", "America/Santo_Domingo"},
        {"DZ", "Africa/Algiers"},
        {"EC", "America/Guayaquil"},
        {"EC", "Pacific/Galapagos"},
        {"EE", "Europe/Tallinn"},
        {"EG", "Africa/Cairo"},
        {"EH", "Africa/El_Aaiun"},
        {"ER", "Africa/Asmara"},
        {"ES", "Europe/Madrid"},
        {"ES", "Africa/Ceuta"},
        {"ES", "Atlantic/Canary"},
        {"ET", "Africa/Addis_Ababa"},
        {"FI", "Europe/Helsinki"},
        {"FJ", "Pacific/Fiji"},
        {"FK", "Atlantic/Stanley"},
        {"FM", "Pacific/Chuuk"},
        {"FM", "Pacific/Pohnpei"},
        {"FM", "Pacific/Kosrae"},
        {"FO", "Atlantic/Faroe"},
        {"FR", "Europe/Paris"},
        {"GA", "Africa/Libreville"},
        {"GB", "Europe/London"},
        {"GD", "America/Grenada"},
        {"GE", "Asia/Tbilisi"},
        {"GF", "America/Cayenne"},
        {"GG", "Europe/Guernsey"},
        {"GH", "Africa/Accra"},
        {"GI", "Europe/Gibraltar"},
        {"GL", "America/Godthab"},
        {"GL", "America/Danmarkshavn"},
        {"GL", "America/Scoresbysund"},
        {"GL", "America/Thule"},
        {"GM", "Africa/Banjul"},
        {"GN", "Africa/Conakry"},
        {"GP", "America/Guadeloupe"},
        {"GQ", "Africa/Malabo"},
        {"GR", "Europe/Athens"},
        {"GS", "Atlantic/South_Georgia"},
        {"GT", "America/Guatemala"},
        {"GU", "Pacific/Guam"},
        {"GW", "Africa/Bissau"},
        {"GY", "America/Guyana"},
        {"HK", "Asia/Hong_Kong"},
        {"HN", "America/Tegucigalpa"},
        {"HR", "Europe/Zagreb"},
        {"HT", "America/Port-au-Prince"},
        {"HU", "Europe/Budapest"},
        {"ID", "Asia/Jakarta"},
        {"ID", "Asia/Pontianak"},
        {"ID", "Asia/Makassar"},
        {"ID", "Asia/Jayapura"},
        {"IE", "Europe/Dublin"},
        {"IL", "Asia/Jerusalem"},
        {"IM", "Europe/Isle_of_Man"},
        {"IN", "Asia/Kolkata"},
        {"IO", "Indian/Chagos"},
        {"IQ", "Asia/Baghdad"},
        {"IR", "Asia/Tehran"},
        {"IS", "Atlantic/Reykjavik"},
        {"IT", "Europe/Rome"},
        {"JE", "Europe/Jersey"},
        {"JM", "America/Jamaica"},
        {"JO", "Asia/Amman"},
        {"JP", "Asia/Tokyo"},
        {"KE", "Africa/Nairobi"},
        {"KG", "Asia/Bishkek"},
        {"KH", "Asia/Phnom_Penh"},
        {"KI", "Pacific/Tarawa"},
        {"KI", "Pacific/Enderbury"},
        {"KI", "Pacific/Kiritimati"},
        {"KM", "Indian/Comoro"},
        {"KN", "America/St_Kitts"},
        {"KP", "Asia/Pyongyang"},
        {"KR", "Asia/Seoul"},
        {"KW", "Asia/Kuwait"},
        {"KY", "America/Cayman"},
        {"KZ", "Asia/Almaty"},
        {"KZ", "Asia/Qyzylorda"},
        {"KZ", "Asia/Aqtobe"},
        {"KZ", "Asia/Aqtau"},
        {"KZ", "Asia/Oral"},
        {"LA", "Asia/Vientiane"},
        {"LB", "Asia/Beirut"},
        {"LC", "America/St_Lucia"},
        {"LI", "Europe/Vaduz"},
        {"LK", "Asia/Colombo"},
        {"LR", "Africa/Monrovia"},
        {"LS", "Africa/Maseru"},
        {"LT", "Europe/Vilnius"},
        {"LU", "Europe/Luxembourg"},
        {"LV", "Europe/Riga"},
        {"LY", "Africa/Tripoli"},
        {"MA", "Africa/Casablanca"},
        {"MC", "Europe/Monaco"},
        {"MD", "Europe/Chisinau"},
        {"ME", "Europe/Podgorica"},
        {"MF", "America/Marigot"},
        {"MG", "Indian/Antananarivo"},
        {"MH", "Pacific/Majuro"},
        {"MH", "Pacific/Kwajalein"},
        {"MK", "Europe/Skopje"},
        {"ML", "Africa/Bamako"},
        {"MM", "Asia/Rangoon"},
        {"MN", "Asia/Ulaanbaatar"},
        {"MN", "Asia/Hovd"},
        {"MN", "Asia/Choibalsan"},
        {"MO", "Asia/Macau"},
        {"MP", "Pacific/Saipan"},
        {"MQ", "America/Martinique"},
        {"MR", "Africa/Nouakchott"},
        {"MS", "America/Montserrat"},
        {"MT", "Europe/Malta"},
        {"MU", "Indian/Mauritius"},
        {"MV", "Indian/Maldives"},
        {"MW", "Africa/Blantyre"},
        {"MX", "America/Mexico_City"},
        {"MX", "America/Cancun"},
        {"MX", "America/Merida"},
        {"MX", "America/Monterrey"},
        {"MX", "America/Matamoros"},
        {"MX", "America/Mazatlan"},
        {"MX", "America/Chihuahua"},
        {"MX", "America/Ojinaga"},
        {"MX", "America/Hermosillo"},
        {"MX", "America/Tijuana"},
        {"MX", "America/Santa_Isabel"},
        {"MX", "America/Bahia_Banderas"},
        {"MY", "Asia/Kuala_Lumpur"},
        {"MY", "Asia/Kuching"},
        {"MZ", "Africa/Maputo"},
        {"NA", "Africa/Windhoek"},
        {"NC", "Pacific/Noumea"},
        {"NE", "Africa/Niamey"},
        {"NF", "Pacific/Norfolk"},
        {"NG", "Africa/Lagos"},
        {"NI", "America/Managua"},
        {"NL", "Europe/Amsterdam"},
        {"NO", "Europe/Oslo"},
        {"NP", "Asia/Kathmandu"},
        {"NR", "Pacific/Nauru"},
        {"NU", "Pacific/Niue"},
        {"NZ", "Pacific/Auckland"},
        {"NZ", "Pacific/Chatham"},
        {"OM", "Asia/Muscat"},
        {"PA", "America/Panama"},
        {"PE", "America/Lima"},
        {"PF", "Pacific/Tahiti"},
        {"PF", "Pacific/Marquesas"},
        {"PF", "Pacific/Gambier"},
        {"PG", "Pacific/Port_Moresby"},
        {"PH", "Asia/Manila"},
        {"PK", "Asia/Karachi"},
        {"PL", "Europe/Warsaw"},
        {"PM", "America/Miquelon"},
        {"PN", "Pacific/Pitcairn"},
        {"PR", "America/Puerto_Rico"},
        {"PS", "Asia/Gaza"},
        {"PS", "Asia/Hebron"},
        {"PT", "Europe/Lisbon"},
        {"PT", "Atlantic/Madeira"},
        {"PT", "Atlantic/Azores"},
        {"PW", "Pacific/Palau"},
        {"PY", "America/Asuncion"},
        {"QA", "Asia/Qatar"},
        {"RE", "Indian/Reunion"},
        {"RO", "Europe/Bucharest"},
        {"RS", "Europe/Belgrade"},
        {"RU", "Europe/Kaliningrad"},
        {"RU", "Europe/Moscow"},
        {"RU", "Europe/Volgograd"},
        {"RU", "Europe/Samara"},
        {"RU", "Asia/Yekaterinburg"},
        {"RU", "Asia/Omsk"},
        {"RU", "Asia/Novosibirsk"},
        {"RU", "Asia/Novokuznetsk"},
        {"RU", "Asia/Krasnoyarsk"},
        {"RU", "Asia/Irkutsk"},
        {"RU", "Asia/Yakutsk"},
        {"RU", "Asia/Khandyga"},
        {"RU", "Asia/Vladivostok"},
        {"RU", "Asia/Sakhalin"},
        {"RU", "Asia/Ust-Nera"},
        {"RU", "Asia/Magadan"},
        {"RU", "Asia/Kamchatka"},
        {"RU", "Asia/Anadyr"},
        {"RW", "Africa/Kigali"},
        {"SA", "Asia/Riyadh"},
        {"SB", "Pacific/Guadalcanal"},
        {"SC", "Indian/Mahe"},
        {"SD", "Africa/Khartoum"},
        {"SE", "Europe/Stockholm"},
        {"SG", "Asia/Singapore"},
        {"SH", "Atlantic/St_Helena"},
        {"SI", "Europe/Ljubljana"},
        {"SJ", "Arctic/Longyearbyen"},
        {"SK", "Europe/Bratislava"},
        {"SL", "Africa/Freetown"},
        {"SM", "Europe/San_Marino"},
        {"SN", "Africa/Dakar"},
        {"SO", "Africa/Mogadishu"},
        {"SR", "America/Paramaribo"},
        {"SS", "Africa/Juba"},
        {"ST", "Africa/Sao_Tome"},
        {"SV", "America/El_Salvador"},
        {"SX", "America/Lower_Princes"},
        {"SY", "Asia/Damascus"},
        {"SZ", "Africa/Mbabane"},
        {"TC", "America/Grand_Turk"},
        {"TD", "Africa/Ndjamena"},
        {"TF", "Indian/Kerguelen"},
        {"TG", "Africa/Lome"},
        {"TH", "Asia/Bangkok"},
        {"TJ", "Asia/Dushanbe"},
        {"TK", "Pacific/Fakaofo"},
        {"TL", "Asia/Dili"},
        {"TM", "Asia/Ashgabat"},
        {"TN", "Africa/Tunis"},
        {"TO", "Pacific/Tongatapu"},
        {"TR", "Europe/Istanbul"},
        {"TT", "America/Port_of_Spain"},
        {"TV", "Pacific/Funafuti"},
        {"TW", "Asia/Taipei"},
        {"TZ", "Africa/Dar_es_Salaam"},
        {"UA", "Europe/Kiev"},
        {"UA", "Europe/Uzhgorod"},
        {"UA", "Europe/Zaporozhye"},
        {"UA", "Europe/Simferopol"},
        {"UG", "Africa/Kampala"},
        {"UM", "Pacific/Johnston"},
        {"UM", "Pacific/Midway"},
        {"UM", "Pacific/Wake"},
        {"US", "America/New_York"},
        {"US", "America/Detroit"},
        {"US", "America/Kentucky/Louisville"},
        {"US", "America/Kentucky/Monticello"},
        {"US", "America/Indiana/Indianapolis"},
        {"US", "America/Indiana/Vincennes"},
        {"US", "America/Indiana/Winamac"},
        {"US", "America/Indiana/Marengo"},
        {"US", "America/Indiana/Petersburg"},
        {"US", "America/Indiana/Vevay"},
        {"US", "America/Chicago"},
        {"US", "America/Indiana/Tell_City"},
        {"US", "America/Indiana/Knox"},
        {"US", "America/Menominee"},
        {"US", "America/North_Dakota/Center"},
        {"US", "America/North_Dakota/New_Salem"},
        {"US", "America/North_Dakota/Beulah"},
        {"US", "America/Denver"},
        {"US", "America/Boise"},
        {"US", "America/Phoenix"},
        {"US", "America/Los_Angeles"},
        {"US", "America/Anchorage"},
        {"US", "America/Juneau"},
        {"US", "America/Sitka"},
        {"US", "America/Yakutat"},
        {"US", "America/Nome"},
        {"US", "America/Adak"},
        {"US", "America/Metlakatla"},
        {"US", "Pacific/Honolulu"},
        {"UY", "America/Montevideo"},
        {"UZ", "Asia/Samarkand"},
        {"UZ", "Asia/Tashkent"},
        {"VA", "Europe/Vatican"},
        {"VC", "America/St_Vincent"},
        {"VE", "America/Caracas"},
        {"VG", "America/Tortola"},
        {"VI", "America/St_Thomas"},
        {"VN", "Asia/Ho_Chi_Minh"},
        {"VU", "Pacific/Efate"},
        {"WF", "Pacific/Wallis"},
        {"WS", "Pacific/Apia"},
        {"YE", "Asia/Aden"},
        {"YT", "Indian/Mayotte"},
        {"ZA", "Africa/Johannesburg"},
        {"ZM", "Africa/Lusaka"},
        {"ZW", "Africa/Harare"},
        // The mappings below are custom additions to zone.tab.
        {"GB", "Etc/GMT"},
        {"GB", "Etc/UTC"},
        {"GB", "Etc/UCT"},
    };

    for (auto const& code_data : olson_code_data)
      map_[code_data.olson_code] = code_data.country_code;

    // These are mapping from old codenames to new codenames. They are also
    // part of public domain, and available at
    // <http://www.ietf.org/timezones/data/backward>.
    struct LinkData {
      const char* old_code;
      const char* new_code;
    };
    static const LinkData link_data[] = {
        {"Africa/Asmera", "Africa/Asmara"},
        {"Africa/Timbuktu", "Africa/Bamako"},
        {"America/Argentina/ComodRivadavia", "America/Argentina/Catamarca"},
        {"America/Atka", "America/Adak"},
        {"America/Buenos_Aires", "America/Argentina/Buenos_Aires"},
        {"America/Catamarca", "America/Argentina/Catamarca"},
        {"America/Coral_Harbour", "America/Atikokan"},
        {"America/Cordoba", "America/Argentina/Cordoba"},
        {"America/Ensenada", "America/Tijuana"},
        {"America/Fort_Wayne", "America/Indiana/Indianapolis"},
        {"America/Indianapolis", "America/Indiana/Indianapolis"},
        {"America/Jujuy", "America/Argentina/Jujuy"},
        {"America/Knox_IN", "America/Indiana/Knox"},
        {"America/Louisville", "America/Kentucky/Louisville"},
        {"America/Mendoza", "America/Argentina/Mendoza"},
        {"America/Porto_Acre", "America/Rio_Branco"},
        {"America/Rosario", "America/Argentina/Cordoba"},
        {"America/Virgin", "America/St_Thomas"},
        {"Asia/Ashkhabad", "Asia/Ashgabat"},
        {"Asia/Chungking", "Asia/Chongqing"},
        {"Asia/Dacca", "Asia/Dhaka"},
        {"Asia/Katmandu", "Asia/Kathmandu"},
        {"Asia/Calcutta", "Asia/Kolkata"},
        {"Asia/Macao", "Asia/Macau"},
        {"Asia/Tel_Aviv", "Asia/Jerusalem"},
        {"Asia/Saigon", "Asia/Ho_Chi_Minh"},
        {"Asia/Thimbu", "Asia/Thimphu"},
        {"Asia/Ujung_Pandang", "Asia/Makassar"},
        {"Asia/Ulan_Bator", "Asia/Ulaanbaatar"},
        {"Atlantic/Faeroe", "Atlantic/Faroe"},
        {"Atlantic/Jan_Mayen", "Europe/Oslo"},
        {"Australia/ACT", "Australia/Sydney"},
        {"Australia/Canberra", "Australia/Sydney"},
        {"Australia/LHI", "Australia/Lord_Howe"},
        {"Australia/NSW", "Australia/Sydney"},
        {"Australia/North", "Australia/Darwin"},
        {"Australia/Queensland", "Australia/Brisbane"},
        {"Australia/South", "Australia/Adelaide"},
        {"Australia/Tasmania", "Australia/Hobart"},
        {"Australia/Victoria", "Australia/Melbourne"},
        {"Australia/West", "Australia/Perth"},
        {"Australia/Yancowinna", "Australia/Broken_Hill"},
        {"Brazil/Acre", "America/Rio_Branco"},
        {"Brazil/DeNoronha", "America/Noronha"},
        {"Brazil/East", "America/Sao_Paulo"},
        {"Brazil/West", "America/Manaus"},
        {"Canada/Atlantic", "America/Halifax"},
        {"Canada/Central", "America/Winnipeg"},
        {"Canada/East-Saskatchewan", "America/Regina"},
        {"Canada/Eastern", "America/Toronto"},
        {"Canada/Mountain", "America/Edmonton"},
        {"Canada/Newfoundland", "America/St_Johns"},
        {"Canada/Pacific", "America/Vancouver"},
        {"Canada/Saskatchewan", "America/Regina"},
        {"Canada/Yukon", "America/Whitehorse"},
        {"Chile/Continental", "America/Santiago"},
        {"Chile/EasterIsland", "Pacific/Easter"},
        {"Cuba", "America/Havana"},
        {"Egypt", "Africa/Cairo"},
        {"Eire", "Europe/Dublin"},
        {"Europe/Belfast", "Europe/London"},
        {"Europe/Tiraspol", "Europe/Chisinau"},
        {"GB", "Europe/London"},
        {"GB-Eire", "Europe/London"},
        {"GMT+0", "Etc/GMT"},
        {"GMT-0", "Etc/GMT"},
        {"GMT0", "Etc/GMT"},
        {"Greenwich", "Etc/GMT"},
        {"Hongkong", "Asia/Hong_Kong"},
        {"Iceland", "Atlantic/Reykjavik"},
        {"Iran", "Asia/Tehran"},
        {"Israel", "Asia/Jerusalem"},
        {"Jamaica", "America/Jamaica"},
        {"Japan", "Asia/Tokyo"},
        {"Kwajalein", "Pacific/Kwajalein"},
        {"Libya", "Africa/Tripoli"},
        {"Mexico/BajaNorte", "America/Tijuana"},
        {"Mexico/BajaSur", "America/Mazatlan"},
        {"Mexico/General", "America/Mexico_City"},
        {"NZ", "Pacific/Auckland"},
        {"NZ-CHAT", "Pacific/Chatham"},
        {"Navajo", "America/Denver"},
        {"PRC", "Asia/Shanghai"},
        {"Pacific/Samoa", "Pacific/Pago_Pago"},
        {"Pacific/Yap", "Pacific/Chuuk"},
        {"Pacific/Truk", "Pacific/Chuuk"},
        {"Pacific/Ponape", "Pacific/Pohnpei"},
        {"Poland", "Europe/Warsaw"},
        {"Portugal", "Europe/Lisbon"},
        {"ROC", "Asia/Taipei"},
        {"ROK", "Asia/Seoul"},
        {"Singapore", "Asia/Singapore"},
        {"Turkey", "Europe/Istanbul"},
        {"UCT", "Etc/UCT"},
        {"US/Alaska", "America/Anchorage"},
        {"US/Aleutian", "America/Adak"},
        {"US/Arizona", "America/Phoenix"},
        {"US/Central", "America/Chicago"},
        {"US/East-Indiana", "America/Indiana/Indianapolis"},
        {"US/Eastern", "America/New_York"},
        {"US/Hawaii", "Pacific/Honolulu"},
        {"US/Indiana-Starke", "America/Indiana/Knox"},
        {"US/Michigan", "America/Detroit"},
        {"US/Mountain", "America/Denver"},
        {"US/Pacific", "America/Los_Angeles"},
        {"US/Samoa", "Pacific/Pago_Pago"},
        {"UTC", "Etc/UTC"},
        {"Universal", "Etc/UTC"},
        {"W-SU", "Europe/Moscow"},
        {"Zulu", "Etc/UTC"},
    };

    for (auto const& data : link_data)
      map_[data.old_code] = map_[data.new_code];
  }

  struct CompareCStrings {
    bool operator()(const char* str1, const char* str2) const {
      return strcmp(str1, str2) < 0;
    }
  };
  std::map<const char*, const char*, CompareCStrings> map_;
};

}  // namespace

std::string CountryCodeForCurrentTimezone() {
  base::FilePath target;
  base::FilePath timezone_path(kTimeZoneFilePath);
  while (base::ReadSymbolicLink(timezone_path, &target)) {
    timezone_path = base::FilePath(target);
  }
  if (timezone_path.value().compare(0, strlen(kZoneInfoFilePath),
                                    kZoneInfoFilePath)) {
    LOGF(WARNING) << "Timezone is unknown. Anti banding may be broken.";
    return std::string();
  }
  std::string olson_code = timezone_path.value();
  olson_code.replace(0, strlen(kZoneInfoFilePath), "");
  LOGF(INFO) << "Timezone: " << olson_code;
  return TimezoneMap::GetInstance()->CountryCodeForTimezone(olson_code);
}

PowerLineFrequency GetPowerLineFrequencyForLocation() {
  const std::string current_country = CountryCodeForCurrentTimezone();
  if (current_country.empty())
    return PowerLineFrequency::FREQ_DEFAULT;
  LOGF(INFO) << "Country: " << current_country;
  // Sorted out list of countries with 60Hz power line frequency, from
  // http://en.wikipedia.org/wiki/Mains_electricity_by_country
  const char* countries_using_60Hz[] = {
      "AI", "AO", "AS", "AW", "AZ", "BM", "BR", "BS", "BZ", "CA", "CO",
      "CR", "CU", "DO", "EC", "FM", "GT", "GU", "GY", "HN", "HT", "JP",
      "KN", "KR", "KY", "MS", "MX", "NI", "PA", "PE", "PF", "PH", "PR",
      "PW", "SA", "SR", "SV", "TT", "TW", "UM", "US", "VG", "VI", "VE"};
  const char** countries_using_60Hz_end =
      countries_using_60Hz + std::size(countries_using_60Hz);
  if (std::find(countries_using_60Hz, countries_using_60Hz_end,
                current_country) == countries_using_60Hz_end) {
    return PowerLineFrequency::FREQ_50HZ;
  }
  return PowerLineFrequency::FREQ_60HZ;
}

}  // namespace cros
