/*
 * 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 <map>

#include <base/files/file_util.h>
#include <base/macros.h>
#include <base/stl_util.h>
#include <base/strings/string16.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 (size_t i = 0; i < base::size(olson_code_data); ++i)
      map_[olson_code_data[i].olson_code] = olson_code_data[i].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 (size_t i = 0; i < base::size(link_data); ++i)
      map_[link_data[i].old_code] = map_[link_data[i].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 + base::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
