import { SVGProps, useMemo } from 'react';

import { Country } from '../../constans/country';
import { useTestIdAttribute } from '../../hooks/useTestIdAttribute';
import { CommonProps } from '../../types';
import { assertEmptyObject } from '../../utils/assertEmptyObject';
import { assertUnreachable } from '../../utils/assertUnreachable';

import { ReactComponent as Ad } from './assets/ad.svg';
import { ReactComponent as Ae } from './assets/ae.svg';
import { ReactComponent as Af } from './assets/af.svg';
import { ReactComponent as Ag } from './assets/ag.svg';
import { ReactComponent as Ai } from './assets/ai.svg';
import { ReactComponent as Al } from './assets/al.svg';
import { ReactComponent as Am } from './assets/am.svg';
import { ReactComponent as Ao } from './assets/ao.svg';
import { ReactComponent as Aq } from './assets/aq.svg';
import { ReactComponent as Ar } from './assets/ar.svg';
import { ReactComponent as As } from './assets/as.svg';
import { ReactComponent as At } from './assets/at.svg';
import { ReactComponent as Au } from './assets/au.svg';
import { ReactComponent as Aw } from './assets/aw.svg';
import { ReactComponent as Az } from './assets/az.svg';
import { ReactComponent as Ba } from './assets/ba.svg';
import { ReactComponent as Bb } from './assets/bb.svg';
import { ReactComponent as Bd } from './assets/bd.svg';
import { ReactComponent as Be } from './assets/be.svg';
import { ReactComponent as Bf } from './assets/bf.svg';
import { ReactComponent as Bg } from './assets/bg.svg';
import { ReactComponent as Bh } from './assets/bh.svg';
import { ReactComponent as Bi } from './assets/bi.svg';
import { ReactComponent as Bj } from './assets/bj.svg';
import { ReactComponent as Bm } from './assets/bm.svg';
import { ReactComponent as Bn } from './assets/bn.svg';
import { ReactComponent as Bo } from './assets/bo.svg';
import { ReactComponent as Bq } from './assets/bq.svg';
import { ReactComponent as Br } from './assets/br.svg';
import { ReactComponent as Bs } from './assets/bs.svg';
import { ReactComponent as Bt } from './assets/bt.svg';
import { ReactComponent as Bv } from './assets/bv.svg';
import { ReactComponent as Bw } from './assets/bw.svg';
import { ReactComponent as By } from './assets/by.svg';
import { ReactComponent as Bz } from './assets/bz.svg';
import { ReactComponent as Ca } from './assets/ca.svg';
import { ReactComponent as Cc } from './assets/cc.svg';
import { ReactComponent as Cd } from './assets/cd.svg';
import { ReactComponent as Cf } from './assets/cf.svg';
import { ReactComponent as Cg } from './assets/cg.svg';
import { ReactComponent as Ch } from './assets/ch.svg';
import { ReactComponent as Ci } from './assets/ci.svg';
import { ReactComponent as Ck } from './assets/ck.svg';
import { ReactComponent as Cl } from './assets/cl.svg';
import { ReactComponent as Cm } from './assets/cm.svg';
import { ReactComponent as Cn } from './assets/cn.svg';
import { ReactComponent as Co } from './assets/co.svg';
import { ReactComponent as Cr } from './assets/cr.svg';
import { ReactComponent as Cu } from './assets/cu.svg';
import { ReactComponent as Cv } from './assets/cv.svg';
import { ReactComponent as Cx } from './assets/cx.svg';
import { ReactComponent as Cy } from './assets/cy.svg';
import { ReactComponent as Cz } from './assets/cz.svg';
import { ReactComponent as De } from './assets/de.svg';
import { ReactComponent as Dj } from './assets/dj.svg';
import { ReactComponent as Dk } from './assets/dk.svg';
import { ReactComponent as Dm } from './assets/dm.svg';
import { ReactComponent as Do } from './assets/do.svg';
import { ReactComponent as Dz } from './assets/dz.svg';
import { ReactComponent as Ec } from './assets/ec.svg';
import { ReactComponent as Ee } from './assets/ee.svg';
import { ReactComponent as Eg } from './assets/eg.svg';
import { ReactComponent as Eh } from './assets/eh.svg';
import { ReactComponent as Er } from './assets/er.svg';
import { ReactComponent as Es } from './assets/es.svg';
import { ReactComponent as Et } from './assets/et.svg';
import { ReactComponent as Fi } from './assets/fi.svg';
import { ReactComponent as Fj } from './assets/fj.svg';
import { ReactComponent as Fk } from './assets/fk.svg';
import { ReactComponent as Fm } from './assets/fm.svg';
import { ReactComponent as Fo } from './assets/fo.svg';
import { ReactComponent as Fr } from './assets/fr.svg';
import { ReactComponent as Ga } from './assets/ga.svg';
import { ReactComponent as Gb } from './assets/gb.svg';
import { ReactComponent as Gd } from './assets/gd.svg';
import { ReactComponent as Ge } from './assets/ge.svg';
import { ReactComponent as Gg } from './assets/gg.svg';
import { ReactComponent as Gh } from './assets/gh.svg';
import { ReactComponent as Gi } from './assets/gi.svg';
import { ReactComponent as Gl } from './assets/gl.svg';
import { ReactComponent as Gm } from './assets/gm.svg';
import { ReactComponent as Gn } from './assets/gn.svg';
import { ReactComponent as Gp } from './assets/gp.svg';
import { ReactComponent as Gq } from './assets/gq.svg';
import { ReactComponent as Gr } from './assets/gr.svg';
import { ReactComponent as Gs } from './assets/gs.svg';
import { ReactComponent as Gt } from './assets/gt.svg';
import { ReactComponent as Gu } from './assets/gu.svg';
import { ReactComponent as Gw } from './assets/gw.svg';
import { ReactComponent as Gy } from './assets/gy.svg';
import { ReactComponent as Hk } from './assets/hk.svg';
import { ReactComponent as Hm } from './assets/hm.svg';
import { ReactComponent as Hn } from './assets/hn.svg';
import { ReactComponent as Hr } from './assets/hr.svg';
import { ReactComponent as Ht } from './assets/ht.svg';
import { ReactComponent as Hu } from './assets/hu.svg';
import { ReactComponent as Id } from './assets/id.svg';
import { ReactComponent as Ie } from './assets/ie.svg';
import { ReactComponent as Il } from './assets/il.svg';
import { ReactComponent as Im } from './assets/im.svg';
import { ReactComponent as In } from './assets/in.svg';
import { ReactComponent as Io } from './assets/io.svg';
import { ReactComponent as Iq } from './assets/iq.svg';
import { ReactComponent as Ir } from './assets/ir.svg';
import { ReactComponent as Is } from './assets/is.svg';
import { ReactComponent as It } from './assets/it.svg';
import { ReactComponent as Je } from './assets/je.svg';
import { ReactComponent as Jm } from './assets/jm.svg';
import { ReactComponent as Jo } from './assets/jo.svg';
import { ReactComponent as Jp } from './assets/jp.svg';
import { ReactComponent as Ke } from './assets/ke.svg';
import { ReactComponent as Kg } from './assets/kg.svg';
import { ReactComponent as Kh } from './assets/kh.svg';
import { ReactComponent as Ki } from './assets/ki.svg';
import { ReactComponent as Km } from './assets/km.svg';
import { ReactComponent as Kn } from './assets/kn.svg';
import { ReactComponent as Kp } from './assets/kp.svg';
import { ReactComponent as Kr } from './assets/kr.svg';
import { ReactComponent as Kw } from './assets/kw.svg';
import { ReactComponent as Ky } from './assets/ky.svg';
import { ReactComponent as Kz } from './assets/kz.svg';
import { ReactComponent as La } from './assets/la.svg';
import { ReactComponent as Lb } from './assets/lb.svg';
import { ReactComponent as Lc } from './assets/lc.svg';
import { ReactComponent as Li } from './assets/li.svg';
import { ReactComponent as Lk } from './assets/lk.svg';
import { ReactComponent as Lr } from './assets/lr.svg';
import { ReactComponent as Ls } from './assets/ls.svg';
import { ReactComponent as Lt } from './assets/lt.svg';
import { ReactComponent as Lu } from './assets/lu.svg';
import { ReactComponent as Lv } from './assets/lv.svg';
import { ReactComponent as Ly } from './assets/ly.svg';
import { ReactComponent as Ma } from './assets/ma.svg';
import { ReactComponent as Mc } from './assets/mc.svg';
import { ReactComponent as Md } from './assets/md.svg';
import { ReactComponent as Me } from './assets/me.svg';
import { ReactComponent as Mg } from './assets/mg.svg';
import { ReactComponent as Mh } from './assets/mh.svg';
import { ReactComponent as Mk } from './assets/mk.svg';
import { ReactComponent as Ml } from './assets/ml.svg';
import { ReactComponent as Mm } from './assets/mm.svg';
import { ReactComponent as Mn } from './assets/mn.svg';
import { ReactComponent as Mo } from './assets/mo.svg';
import { ReactComponent as Mp } from './assets/mp.svg';
import { ReactComponent as Mq } from './assets/mq.svg';
import { ReactComponent as Mr } from './assets/mr.svg';
import { ReactComponent as Ms } from './assets/ms.svg';
import { ReactComponent as Mt } from './assets/mt.svg';
import { ReactComponent as Mu } from './assets/mu.svg';
import { ReactComponent as Mv } from './assets/mv.svg';
import { ReactComponent as Mw } from './assets/mw.svg';
import { ReactComponent as Mx } from './assets/mx.svg';
import { ReactComponent as My } from './assets/my.svg';
import { ReactComponent as Mz } from './assets/mz.svg';
import { ReactComponent as Na } from './assets/na.svg';
import { ReactComponent as Nc } from './assets/nc.svg';
import { ReactComponent as Ne } from './assets/ne.svg';
import { ReactComponent as Nf } from './assets/nf.svg';
import { ReactComponent as Ng } from './assets/ng.svg';
import { ReactComponent as Ni } from './assets/ni.svg';
import { ReactComponent as Nl } from './assets/nl.svg';
import { ReactComponent as No } from './assets/no.svg';
import { ReactComponent as Np } from './assets/np.svg';
import { ReactComponent as Nr } from './assets/nr.svg';
import { ReactComponent as Nu } from './assets/nu.svg';
import { ReactComponent as Nz } from './assets/nz.svg';
import { ReactComponent as Om } from './assets/om.svg';
import { ReactComponent as Pa } from './assets/pa.svg';
import { ReactComponent as Pe } from './assets/pe.svg';
import { ReactComponent as Pf } from './assets/pf.svg';
import { ReactComponent as Pg } from './assets/pg.svg';
import { ReactComponent as Ph } from './assets/ph.svg';
import { ReactComponent as Pk } from './assets/pk.svg';
import { ReactComponent as Pl } from './assets/pl.svg';
import { ReactComponent as Pm } from './assets/pm.svg';
import { ReactComponent as Pn } from './assets/pn.svg';
import { ReactComponent as Pr } from './assets/pr.svg';
import { ReactComponent as Ps } from './assets/ps.svg';
import { ReactComponent as Pt } from './assets/pt.svg';
import { ReactComponent as Pw } from './assets/pw.svg';
import { ReactComponent as Py } from './assets/py.svg';
import { ReactComponent as Qa } from './assets/qa.svg';
import { ReactComponent as Re } from './assets/re.svg';
import { ReactComponent as Ro } from './assets/ro.svg';
import { ReactComponent as Rs } from './assets/rs.svg';
import { ReactComponent as Ru } from './assets/ru.svg';
import { ReactComponent as Rw } from './assets/rw.svg';
import { ReactComponent as Sa } from './assets/sa.svg';
import { ReactComponent as Sb } from './assets/sb.svg';
import { ReactComponent as Sc } from './assets/sc.svg';
import { ReactComponent as Sd } from './assets/sd.svg';
import { ReactComponent as Se } from './assets/se.svg';
import { ReactComponent as Sg } from './assets/sg.svg';
import { ReactComponent as Sh } from './assets/sh.svg';
import { ReactComponent as Si } from './assets/si.svg';
import { ReactComponent as Sj } from './assets/sj.svg';
import { ReactComponent as Sk } from './assets/sk.svg';
import { ReactComponent as Sl } from './assets/sl.svg';
import { ReactComponent as Sm } from './assets/sm.svg';
import { ReactComponent as Sn } from './assets/sn.svg';
import { ReactComponent as So } from './assets/so.svg';
import { ReactComponent as Sr } from './assets/sr.svg';
import { ReactComponent as St } from './assets/st.svg';
import { ReactComponent as Sv } from './assets/sv.svg';
import { ReactComponent as Sy } from './assets/sy.svg';
import { ReactComponent as Sz } from './assets/sz.svg';
import { ReactComponent as Tc } from './assets/tc.svg';
import { ReactComponent as Td } from './assets/td.svg';
import { ReactComponent as Tf } from './assets/tf.svg';
import { ReactComponent as Tg } from './assets/tg.svg';
import { ReactComponent as Th } from './assets/th.svg';
import { ReactComponent as Tj } from './assets/tj.svg';
import { ReactComponent as Tk } from './assets/tk.svg';
import { ReactComponent as Tl } from './assets/tl.svg';
import { ReactComponent as Tm } from './assets/tm.svg';
import { ReactComponent as Tn } from './assets/tn.svg';
import { ReactComponent as To } from './assets/to.svg';
import { ReactComponent as Tr } from './assets/tr.svg';
import { ReactComponent as Tt } from './assets/tt.svg';
import { ReactComponent as Tv } from './assets/tv.svg';
import { ReactComponent as Tw } from './assets/tw.svg';
import { ReactComponent as Tz } from './assets/tz.svg';
import { ReactComponent as Ua } from './assets/ua.svg';
import { ReactComponent as Ug } from './assets/ug.svg';
import { ReactComponent as Um } from './assets/um.svg';
import { ReactComponent as Us } from './assets/us.svg';
import { ReactComponent as Uy } from './assets/uy.svg';
import { ReactComponent as Uz } from './assets/uz.svg';
import { ReactComponent as Va } from './assets/va.svg';
import { ReactComponent as Vc } from './assets/vc.svg';
import { ReactComponent as Ve } from './assets/ve.svg';
import { ReactComponent as Vg } from './assets/vg.svg';
import { ReactComponent as Vi } from './assets/vi.svg';
import { ReactComponent as Vn } from './assets/vn.svg';
import { ReactComponent as Vu } from './assets/vu.svg';
import { ReactComponent as Wf } from './assets/wf.svg';
import { ReactComponent as Ws } from './assets/ws.svg';
import { ReactComponent as Ye } from './assets/ye.svg';
import { ReactComponent as Yt } from './assets/yt.svg';
import { ReactComponent as Za } from './assets/za.svg';
import { ReactComponent as Zm } from './assets/zm.svg';
import { ReactComponent as Zw } from './assets/zw.svg';

export interface CountryIconProps extends CommonProps {
  /** Selected country */
  country: Country;
  ariaLabel?: SVGProps<SVGSVGElement>['aria-label'];
}

/**
 * Icon that contains flag for given {@link CountryIconProps.country}.
 *
 * ```tsx
 * import { CountryIcon, Country } from "ui-kit";
 *
 * <CountryIcon country={Country.Australia} />
 * ```
 */
export function CountryIcon(props: CountryIconProps) {
  const { country, className, ariaLabel, testId, ariaDescribedBy, ...rest } = props;
  assertEmptyObject(rest);

  const testIdAttribute = useTestIdAttribute();

  const Svg = useMemo(() => {
    switch (country) {
      /* istanbul ignore next */
      case Country.Afghanistan:
        return Af;
      /* istanbul ignore next */
      case Country.Albania:
        return Al;
      /* istanbul ignore next */
      case Country.Algeria:
        return Dz;
      /* istanbul ignore next */
      case Country.AmericanSamoa:
        return As;
      /* istanbul ignore next */
      case Country.Andorra:
        return Ad;
      /* istanbul ignore next */
      case Country.Angola:
        return Ao;
      /* istanbul ignore next */
      case Country.Anguilla:
        return Ai;
      /* istanbul ignore next */
      case Country.Antarctica:
        return Aq;
      /* istanbul ignore next */
      case Country.AntiguaAndBarbuda:
        return Ag;
      /* istanbul ignore next */
      case Country.Argentina:
        return Ar;
      /* istanbul ignore next */
      case Country.Armenia:
        return Am;
      /* istanbul ignore next */
      case Country.Aruba:
        return Aw;
      /* istanbul ignore next */
      case Country.Australia:
        return Au;
      /* istanbul ignore next */
      case Country.Austria:
        return At;
      /* istanbul ignore next */
      case Country.Azerbaijan:
        return Az;
      /* istanbul ignore next */
      case Country.Bahamas:
        return Bs;
      /* istanbul ignore next */
      case Country.Bahrain:
        return Bh;
      /* istanbul ignore next */
      case Country.Bangladesh:
        return Bd;
      /* istanbul ignore next */
      case Country.Barbados:
        return Bb;
      /* istanbul ignore next */
      case Country.Belarus:
        return By;
      /* istanbul ignore next */
      case Country.Belgium:
        return Be;
      /* istanbul ignore next */
      case Country.Belize:
        return Bz;
      /* istanbul ignore next */
      case Country.Benin:
        return Bj;
      /* istanbul ignore next */
      case Country.Bermuda:
        return Bm;
      /* istanbul ignore next */
      case Country.Bhutan:
        return Bt;
      /* istanbul ignore next */
      case Country.BoliviaPlurinationalStateOfBolivia:
        return Bo;
      /* istanbul ignore next */
      case Country.BosniaAndHerzegovina:
        return Ba;
      /* istanbul ignore next */
      case Country.Botswana:
        return Bw;
      /* istanbul ignore next */
      case Country.BouvetIsland:
        return Bv;
      /* istanbul ignore next */
      case Country.Brazil:
        return Br;
      /* istanbul ignore next */
      case Country.BritishIndianOceanTerritory:
        return Io;
      /* istanbul ignore next */
      case Country.BruneiDarussalam:
        return Bn;
      /* istanbul ignore next */
      case Country.Bulgaria:
        return Bg;
      /* istanbul ignore next */
      case Country.BurkinaFaso:
        return Bf;
      /* istanbul ignore next */
      case Country.Burundi:
        return Bi;
      /* istanbul ignore next */
      case Country.Cambodia:
        return Kh;
      /* istanbul ignore next */
      case Country.Cameroon:
        return Cm;
      /* istanbul ignore next */
      case Country.Canada:
        return Ca;
      /* istanbul ignore next */
      case Country.CapeVerde:
        return Cv;
      /* istanbul ignore next */
      case Country.CaymanIslands:
        return Ky;
      /* istanbul ignore next */
      case Country.CentralAfricanRepublic:
        return Cf;
      /* istanbul ignore next */
      case Country.Chad:
        return Td;
      /* istanbul ignore next */
      case Country.Chile:
        return Cl;
      /* istanbul ignore next */
      case Country.China:
        return Cn;
      /* istanbul ignore next */
      case Country.ChristmasIsland:
        return Cx;
      /* istanbul ignore next */
      case Country.CocosKeelingIslands:
        return Cc;
      /* istanbul ignore next */
      case Country.Colombia:
        return Co;
      /* istanbul ignore next */
      case Country.Comoros:
        return Km;
      /* istanbul ignore next */
      case Country.Congo:
        return Cg;
      /* istanbul ignore next */
      case Country.CongoTheDemocraticRepublicOfThe:
        return Cd;
      /* istanbul ignore next */
      case Country.CookIslands:
        return Ck;
      /* istanbul ignore next */
      case Country.CostaRica:
        return Cr;
      /* istanbul ignore next */
      case Country.Croatia:
        return Hr;
      /* istanbul ignore next */
      case Country.Cuba:
        return Cu;
      /* istanbul ignore next */
      case Country.Cyprus:
        return Cy;
      /* istanbul ignore next */
      case Country.CzechRepublic:
        return Cz;
      /* istanbul ignore next */
      case Country.Denmark:
        return Dk;
      /* istanbul ignore next */
      case Country.Djibouti:
        return Dj;
      /* istanbul ignore next */
      case Country.Dominica:
        return Dm;
      /* istanbul ignore next */
      case Country.DominicanRepublic:
        return Do;
      /* istanbul ignore next */
      case Country.Ecuador:
        return Ec;
      /* istanbul ignore next */
      case Country.Egypt:
        return Eg;
      /* istanbul ignore next */
      case Country.ElSalvador:
        return Sv;
      /* istanbul ignore next */
      case Country.EquatorialGuinea:
        return Gq;
      /* istanbul ignore next */
      case Country.Eritrea:
        return Er;
      /* istanbul ignore next */
      case Country.Estonia:
        return Ee;
      /* istanbul ignore next */
      case Country.Ethiopia:
        return Et;
      /* istanbul ignore next */
      case Country.FalklandIslands:
        return Fk;
      /* istanbul ignore next */
      case Country.FaroeIslands:
        return Fo;
      /* istanbul ignore next */
      case Country.Fiji:
        return Fj;
      /* istanbul ignore next */
      case Country.Finland:
        return Fi;
      /* istanbul ignore next */
      case Country.France:
        return Fr;
      /* istanbul ignore next */
      case Country.FrenchPolynesia:
        return Pf;
      /* istanbul ignore next */
      case Country.FrenchSouthernAndAntarcticLands:
        return Tf;
      /* istanbul ignore next */
      case Country.Gabon:
        return Ga;
      /* istanbul ignore next */
      case Country.Gambia:
        return Gm;
      /* istanbul ignore next */
      case Country.Georgia:
        return Ge;
      /* istanbul ignore next */
      case Country.Germany:
        return De;
      /* istanbul ignore next */
      case Country.Ghana:
        return Gh;
      /* istanbul ignore next */
      case Country.Gibraltar:
        return Gi;
      /* istanbul ignore next */
      case Country.Greece:
        return Gr;
      /* istanbul ignore next */
      case Country.Greenland:
        return Gl;
      /* istanbul ignore next */
      case Country.Grenada:
        return Gd;
      /* istanbul ignore next */
      case Country.Guadeloupe:
        return Gp;
      /* istanbul ignore next */
      case Country.Guam:
        return Gu;
      /* istanbul ignore next */
      case Country.Guatemala:
        return Gt;
      /* istanbul ignore next */
      case Country.Guernsey:
        return Gg;
      /* istanbul ignore next */
      case Country.Guinea:
        return Gn;
      /* istanbul ignore next */
      case Country.GuineaBissau:
        return Gw;
      /* istanbul ignore next */
      case Country.Guyana:
        return Gy;
      /* istanbul ignore next */
      case Country.Haiti:
        return Ht;
      /* istanbul ignore next */
      case Country.HeardIslandAndMcDonaldIslands:
        return Hm;
      /* istanbul ignore next */
      case Country.Honduras:
        return Hn;
      /* istanbul ignore next */
      case Country.HongKong:
        return Hk;
      /* istanbul ignore next */
      case Country.Hungary:
        return Hu;
      /* istanbul ignore next */
      case Country.Iceland:
        return Is;
      /* istanbul ignore next */
      case Country.India:
        return In;
      /* istanbul ignore next */
      case Country.Indonesia:
        return Id;
      /* istanbul ignore next */
      case Country.IranIslamicRepublicOf:
        return Ir;
      /* istanbul ignore next */
      case Country.Iraq:
        return Iq;
      /* istanbul ignore next */
      case Country.Ireland:
        return Ie;
      /* istanbul ignore next */
      case Country.IsleOfMan:
        return Im;
      /* istanbul ignore next */
      case Country.Israel:
        return Il;
      /* istanbul ignore next */
      case Country.Italy:
        return It;
      /* istanbul ignore next */
      case Country.IvoryCoast:
        return Ci;
      /* istanbul ignore next */
      case Country.Jamaica:
        return Jm;
      /* istanbul ignore next */
      case Country.Japan:
        return Jp;
      /* istanbul ignore next */
      case Country.Jersey:
        return Je;
      /* istanbul ignore next */
      case Country.Jordan:
        return Jo;
      /* istanbul ignore next */
      case Country.Kazakhstan:
        return Kz;
      /* istanbul ignore next */
      case Country.Kenya:
        return Ke;
      /* istanbul ignore next */
      case Country.Kiribati:
        return Ki;
      /* istanbul ignore next */
      case Country.Kuwait:
        return Kw;
      /* istanbul ignore next */
      case Country.Kyrgyzstan:
        return Kg;
      /* istanbul ignore next */
      case Country.Laos:
        return La;
      /* istanbul ignore next */
      case Country.Latvia:
        return Lv;
      /* istanbul ignore next */
      case Country.Lebanon:
        return Lb;
      /* istanbul ignore next */
      case Country.Lesotho:
        return Ls;
      /* istanbul ignore next */
      case Country.Liberia:
        return Lr;
      /* istanbul ignore next */
      case Country.LibyanArabJamahiriya:
        return Ly;
      /* istanbul ignore next */
      case Country.Liechtenstein:
        return Li;
      /* istanbul ignore next */
      case Country.Lithuania:
        return Lt;
      /* istanbul ignore next */
      case Country.Luxembourg:
        return Lu;
      /* istanbul ignore next */
      case Country.Macau:
        return Mo;
      /* istanbul ignore next */
      case Country.MacedoniaTheFormerYugoslavRepublicOf:
        return Mk;
      /* istanbul ignore next */
      case Country.Madagascar:
        return Mg;
      /* istanbul ignore next */
      case Country.Malawi:
        return Mw;
      /* istanbul ignore next */
      case Country.Malaysia:
        return My;
      /* istanbul ignore next */
      case Country.Maldives:
        return Mv;
      /* istanbul ignore next */
      case Country.Mali:
        return Ml;
      /* istanbul ignore next */
      case Country.Malta:
        return Mt;
      /* istanbul ignore next */
      case Country.MarshallIslands:
        return Mh;
      /* istanbul ignore next */
      case Country.Martinique:
        return Mq;
      /* istanbul ignore next */
      case Country.Mauritania:
        return Mr;
      /* istanbul ignore next */
      case Country.Mauritius:
        return Mu;
      /* istanbul ignore next */
      case Country.Mayotte:
        return Yt;
      /* istanbul ignore next */
      case Country.Mexico:
        return Mx;
      /* istanbul ignore next */
      case Country.MicronesiaFederatedStatesOf:
        return Fm;
      /* istanbul ignore next */
      case Country.MoldovaRepublicOf:
        return Md;
      /* istanbul ignore next */
      case Country.Monaco:
        return Mc;
      /* istanbul ignore next */
      case Country.Mongolia:
        return Mn;
      /* istanbul ignore next */
      case Country.Montenegro:
        return Me;
      /* istanbul ignore next */
      case Country.Montserrat:
        return Ms;
      /* istanbul ignore next */
      case Country.Morocco:
        return Ma;
      /* istanbul ignore next */
      case Country.Mozambique:
        return Mz;
      /* istanbul ignore next */
      case Country.Myanmar:
        return Mm;
      /* istanbul ignore next */
      case Country.Namibia:
        return Na;
      /* istanbul ignore next */
      case Country.Nauru:
        return Nr;
      /* istanbul ignore next */
      case Country.Nepal:
        return Np;
      /* istanbul ignore next */
      case Country.Netherlands:
        return Nl;
      /* istanbul ignore next */
      case Country.NetherlandsAntilles:
        return Bq;
      /* istanbul ignore next */
      case Country.NewCaledonia:
        return Nc;
      /* istanbul ignore next */
      case Country.NewZealand:
        return Nz;
      /* istanbul ignore next */
      case Country.Nicaragua:
        return Ni;
      /* istanbul ignore next */
      case Country.Niger:
        return Ne;
      /* istanbul ignore next */
      case Country.Nigeria:
        return Ng;
      /* istanbul ignore next */
      case Country.Niue:
        return Nu;
      /* istanbul ignore next */
      case Country.NorfolkIsland:
        return Nf;
      /* istanbul ignore next */
      case Country.NorthernMarianaIslands:
        return Mp;
      /* istanbul ignore next */
      case Country.NorthKorea:
        return Kp;
      /* istanbul ignore next */
      case Country.Norway:
        return No;
      /* istanbul ignore next */
      case Country.Oman:
        return Om;
      /* istanbul ignore next */
      case Country.Pakistan:
        return Pk;
      /* istanbul ignore next */
      case Country.Palau:
        return Pw;
      /* istanbul ignore next */
      case Country.PalestinianTerritoryOccupied:
        return Ps;
      /* istanbul ignore next */
      case Country.Panama:
        return Pa;
      /* istanbul ignore next */
      case Country.PapuaNewGuinea:
        return Pg;
      /* istanbul ignore next */
      case Country.Paraguay:
        return Py;
      /* istanbul ignore next */
      case Country.Peru:
        return Pe;
      /* istanbul ignore next */
      case Country.Philippines:
        return Ph;
      /* istanbul ignore next */
      case Country.Pitcairn:
        return Pn;
      /* istanbul ignore next */
      case Country.Poland:
        return Pl;
      /* istanbul ignore next */
      case Country.Portugal:
        return Pt;
      /* istanbul ignore next */
      case Country.PuertoRico:
        return Pr;
      /* istanbul ignore next */
      case Country.Qatar:
        return Qa;
      /* istanbul ignore next */
      case Country.Reunion:
        return Re;
      /* istanbul ignore next */
      case Country.Romania:
        return Ro;
      /* istanbul ignore next */
      case Country.Russia:
        return Ru;
      /* istanbul ignore next */
      case Country.Rwanda:
        return Rw;
      /* istanbul ignore next */
      case Country.SaintHelenaAscensionAndTristanDaCunha:
        return Sh;
      /* istanbul ignore next */
      case Country.SaintKittsAndNevis:
        return Kn;
      /* istanbul ignore next */
      case Country.SaintLucia:
        return Lc;
      /* istanbul ignore next */
      case Country.SaintPierreAndMiquelon:
        return Pm;
      /* istanbul ignore next */
      case Country.SaintVincentAndTheGrenadines:
        return Vc;
      /* istanbul ignore next */
      case Country.Samoa:
        return Ws;
      /* istanbul ignore next */
      case Country.SanMarino:
        return Sm;
      /* istanbul ignore next */
      case Country.SaoTomeAndPrincipe:
        return St;
      /* istanbul ignore next */
      case Country.SaudiArabia:
        return Sa;
      /* istanbul ignore next */
      case Country.Senegal:
        return Sn;
      /* istanbul ignore next */
      case Country.Serbia:
        return Rs;
      /* istanbul ignore next */
      case Country.Seychelles:
        return Sc;
      /* istanbul ignore next */
      case Country.SierraLeone:
        return Sl;
      /* istanbul ignore next */
      case Country.Singapore:
        return Sg;
      /* istanbul ignore next */
      case Country.Slovakia:
        return Sk;
      /* istanbul ignore next */
      case Country.Slovenia:
        return Si;
      /* istanbul ignore next */
      case Country.SolomonIslands:
        return Sb;
      /* istanbul ignore next */
      case Country.Somalia:
        return So;
      /* istanbul ignore next */
      case Country.SouthAfrica:
        return Za;
      /* istanbul ignore next */
      case Country.SouthGeorgiaAndTheSouthSandwichIslands:
        return Gs;
      /* istanbul ignore next */
      case Country.SouthKorea:
        return Kr;
      /* istanbul ignore next */
      case Country.Spain:
        return Es;
      /* istanbul ignore next */
      case Country.SriLanka:
        return Lk;
      /* istanbul ignore next */
      case Country.Sudan:
        return Sd;
      /* istanbul ignore next */
      case Country.Suriname:
        return Sr;
      /* istanbul ignore next */
      case Country.SvalbardAndJanMayen:
        return Sj;
      /* istanbul ignore next */
      case Country.Swaziland:
        return Sz;
      /* istanbul ignore next */
      case Country.Sweden:
        return Se;
      /* istanbul ignore next */
      case Country.Switzerland:
        return Ch;
      /* istanbul ignore next */
      case Country.Syria:
        return Sy;
      /* istanbul ignore next */
      case Country.Taiwan:
        return Tw;
      /* istanbul ignore next */
      case Country.Tajikistan:
        return Tj;
      /* istanbul ignore next */
      case Country.TanzaniaUnitedRepublicOf:
        return Tz;
      /* istanbul ignore next */
      case Country.Thailand:
        return Th;
      /* istanbul ignore next */
      case Country.TimorLeste:
        return Tl;
      /* istanbul ignore next */
      case Country.Togo:
        return Tg;
      /* istanbul ignore next */
      case Country.Tokelau:
        return Tk;
      /* istanbul ignore next */
      case Country.Tonga:
        return To;
      /* istanbul ignore next */
      case Country.TrinidadAndTobago:
        return Tt;
      /* istanbul ignore next */
      case Country.Tunisia:
        return Tn;
      /* istanbul ignore next */
      case Country.Turkey:
        return Tr;
      /* istanbul ignore next */
      case Country.Turkmenistan:
        return Tm;
      /* istanbul ignore next */
      case Country.TurksAndCaicosIslands:
        return Tc;
      /* istanbul ignore next */
      case Country.Tuvalu:
        return Tv;
      /* istanbul ignore next */
      case Country.Uganda:
        return Ug;
      /* istanbul ignore next */
      case Country.Ukraine:
        return Ua;
      /* istanbul ignore next */
      case Country.UnitedArabEmirates:
        return Ae;
      /* istanbul ignore next */
      case Country.UnitedKingdom:
        return Gb;
      /* istanbul ignore next */
      case Country.UnitedStates:
        return Us;
      /* istanbul ignore next */
      case Country.UnitedStatesMinorOutlyingIslands:
        return Um;
      /* istanbul ignore next */
      case Country.Uruguay:
        return Uy;
      /* istanbul ignore next */
      case Country.Uzbekistan:
        return Uz;
      /* istanbul ignore next */
      case Country.Vanuatu:
        return Vu;
      /* istanbul ignore next */
      case Country.VaticanCityStateHolySee:
        return Va;
      /* istanbul ignore next */
      case Country.VenezuelaBolivarianRepublicOf:
        return Ve;
      /* istanbul ignore next */
      case Country.Vietnam:
        return Vn;
      /* istanbul ignore next */
      case Country.VirginIslandsBritish:
        return Vg;
      /* istanbul ignore next */
      case Country.VirginIslandsUS:
        return Vi;
      /* istanbul ignore next */
      case Country.WallisAndFutuna:
        return Wf;
      /* istanbul ignore next */
      case Country.WesternSahara:
        return Eh;
      /* istanbul ignore next */
      case Country.Yemen:
        return Ye;
      /* istanbul ignore next */
      case Country.Zambia:
        return Zm;
      /* istanbul ignore next */
      case Country.Zimbabwe:
        return Zw;
      /* istanbul ignore next */
      default:
        assertUnreachable(country);
    }
  }, [country]);

  return (
    <Svg
      aria-describedby={ariaDescribedBy}
      aria-hidden
      aria-label={ariaLabel}
      className={className}
      data-country={country}
      focusable="false"
      role="img"
      {...{ [testIdAttribute]: testId }}
    />
  );
}
