/**
  * Returns a list of all taxamo relevant EU countries.
  *
  * @since  1.0.0
  * @api
  *
  * @param  string $type [prefix|name|vat]
  *         name ..   code => "name"
  *         prefix .. code => "prefix - name"
  *         vat ..    vat-prefix => code
  * @return array
  */
 public static function get_country_codes($type = 'prefix')
 {
     if (null === self::$Countries) {
         $country_names = MS_Gateway::get_country_codes();
         // Country names in current language.
         $list = get_site_transient('ms_taxamo_countries');
         $list = false;
         if (!$list || !is_array($list)) {
             $resp = self::taxamo()->getCountriesDict('true');
             $list = array();
             foreach ($resp->dictionary as $item) {
                 $list[$item->code] = array('name' => $item->name, 'vat' => $item->tax_number_country_code);
             }
             set_site_transient('ms_taxamo_countries', $list, WEEK_IN_SECONDS);
         }
         self::$Countries = array();
         self::$Countries_Prefix = array();
         self::$Countries_Vat = array();
         foreach ($list as $code => $item) {
             if (isset($country_names[$code])) {
                 $item['name'] = $country_names[$code];
             }
             self::$Countries[$code] = $item['name'];
             self::$Countries_Prefix[$code] = $code . ' - ' . $item['name'];
             self::$Countries_Vat[$item['vat']] = $code;
         }
         self::$Countries['XX'] = '- ' . __('Outside the EU', 'membership2') . ' -';
         self::$Countries_Prefix['XX'] = '- ' . __('Outside the EU', 'membership2') . ' -';
     }
     switch ($type) {
         case 'prefix':
             return self::$Countries_Prefix;
         case 'vat':
             return self::$Countries_Vat;
         case 'name':
         default:
             return self::$Countries;
     }
 }