import FormatTyp from '../enums/common.enum';
import { RodzajFaktury } from '../enums/invoice.enums';

export const TRodzajFaktury: Record<string, string> = Object.keys(RodzajFaktury).reduce(
  (acc, key) => {
    const typedKey = key as keyof typeof RodzajFaktury;

    acc[typedKey] = typedKey;
    return acc;
  },
  {} as Record<keyof typeof RodzajFaktury, string>
);

export const TypKorekty: Record<string, string> = {
  '1': 'Korekta skutkująca w dacie ujęcia faktury pierwotnej',
  '2': 'Korekta skutkująca w dacie wystawienia faktury korygującej',
  '3': 'Korekta skutkująca w dacie innej, w tym gdy dla różnych pozycji faktury korygującej daty te są różne',
};
export const TStawkaPodatku_FA1: Record<string, string> = {
  '23': '23%',
  '22': '22%',
  '8': '8%',
  '7': '7%',
  '5': '5%',
  '4': '4% lub 3% lub oo',
  '3': '4% lub 3% lub oo',
  '0': '0%',

  zw: 'zwolnione z opodatkowania',
  oo: '4% lub 3% lub oo\n' +
      'UWAGA: oo jest wykazywane łącznie z 4% lub 3%',
  np: 'niepodlegające opodatkowaniu-transakcje dostawy towarów oraz świadczenia usług poza terytorium kraju',
};

export const TStawkaPodatku_FA2: Record<string, string> = {
  '23': '23%',
  '22': '22%',
  '8': '8%',
  '7': '7%',
  '5': '5%',
  '4': '4%',
  '3': '3%',
  '0': '0%',

  zw: 'zwolnione od podatku',
  oo: 'odwrotne obciążenie',
  np: 'niepodlegające opodatkowaniu-transakcje dostawy towarów oraz świadczenia usług poza terytorium kraju',
};

export const TStawkaPodatku_FA3: Record<string, string> = {
  '23': '23%',
  '22': '22%',
  '8': '8%',
  '7': '7%',
  '5': '5%',
  '4': '4%',
  '3': '3%',

  '0 KR':
    '0% - KR',
  '0 WDT': '0% - WDT',
  '0 EX': '0% - EX',

  zw: 'zw',
  oo: 'oo',

  'np I':
    'np I',
  'np II':
    'np II',
};

export const Kraj: Record<string, string> = {
  AF: 'Afganistan',
  AX: 'Aland Islands',
  AL: 'Albania',
  DZ: 'Algieria',
  AD: 'Andora',
  AO: 'Angola',
  AI: 'Anguilla',
  AQ: 'Antarktyda',
  AG: 'Antigua i Barbuda',
  AN: 'Antyle Holenderskie',
  SA: 'Arabia Saudyjska',
  AR: 'Argentyna',
  AM: 'Armenia',
  AW: 'Aruba',
  AU: 'Australia',
  AT: 'Austria',
  AZ: 'Azerbejdżan',
  BS: 'Bahamy',
  BH: 'Bahrajn',
  BD: 'Bangladesz',
  BB: 'Barbados',
  BE: 'Belgia',
  BZ: 'Belize',
  BJ: 'Benin',
  BM: 'Bermudy',
  BT: 'Bhutan',
  BY: 'Białoruś',
  BO: 'Boliwia',
  BQ: 'Bonaire, Sint Eustatius i Saba',
  BA: 'Bośnia i Hercegowina',
  BW: 'Botswana',
  BR: 'Brazylia',
  BN: 'Brunei Darussalam',
  IO: 'Brytyjskie Terytorium Oceanu Indyjskiego',
  BG: 'Bułgaria',
  BF: 'Burkina faso',
  BI: 'Burundi',
  XC: 'Ceuta',
  CL: 'Chile',
  CN: 'Chiny',
  HR: 'Chorwacja',
  CW: 'Curaçao',
  CY: 'Cypr',
  TD: 'Czad',
  ME: 'Czarnogóra',
  DK: 'Dania',
  DM: 'Dominika',
  DO: 'Dominikana',
  DJ: 'Dżibuti',
  EG: 'Egipt',
  EC: 'Ekwador',
  ER: 'Erytrea',
  EE: 'Estonia',
  ET: 'Etiopia',
  FK: 'Falklandy',
  FJ: 'Fidżi Republika',
  PH: 'Filipiny',
  FI: 'Finlandia',
  FR: 'Francja',
  TF: 'Francuskie Terytorium Południowe',
  GA: 'Gabon',
  GM: 'Gambia',
  GH: 'Ghana',
  GI: 'Gibraltar',
  GR: 'Grecja',
  GD: 'Grenada',
  GL: 'Grenlandia',
  GE: 'Gruzja',
  GU: 'Guam',
  GG: 'Guernsey',
  GY: 'Gujana',
  GF: 'Gujana Francuska',
  GP: 'Gwadelupa',
  GT: 'Gwatemala',
  GN: 'Gwinea',
  GQ: 'Gwinea Równikowa',
  GW: 'Gwinea Bissau',
  HT: 'Haiti',
  ES: 'Hiszpania',
  HN: 'Honduras',
  HK: 'Hongkong',
  IN: 'Indie',
  ID: 'Indonezja',
  IQ: 'Irak',
  IR: 'Iran',
  IE: 'Irlandia',
  IS: 'Islandia',
  IL: 'Izrael',
  JM: 'Jamajka',
  JP: 'Japonia',
  YE: 'Jemen',
  JE: 'Jersey',
  JO: 'Jordania',
  KY: 'Kajmany',
  KH: 'Kambodża',
  CM: 'Kamerun',
  CA: 'Kanada',
  QA: 'Katar',
  KZ: 'Kazachstan',
  KE: 'Kenia',
  KG: 'Kirgistan',
  KI: 'Kiribati',
  CO: 'Kolumbia',
  KM: 'Komory',
  CG: 'Kongo',
  CD: 'Kongo, Republika Demokratyczna',
  KP: 'Koreańska Republika Ludowo-Demokratyczna',
  XK: 'Kosowo',
  CR: 'Kostaryka',
  CU: 'Kuba',
  KW: 'Kuwejt',
  LA: 'Laos',
  LS: 'Lesotho',
  LB: 'Liban',
  LR: 'Liberia',
  LY: 'Libia',
  LI: 'Liechtenstein',
  LT: 'Litwa',
  LV: 'Łotwa',
  LU: 'Luksemburg',
  MK: 'Macedonia',
  MG: 'Madagaskar',
  YT: 'Majotta',
  MO: 'Makau',
  MW: 'Malawi',
  MV: 'Malediwy',
  MY: 'Malezja',
  ML: 'Mali',
  MT: 'Malta',
  MP: 'Mariany Północne',
  MA: 'Maroko',
  MQ: 'Martynika',
  MR: 'Mauretania',
  MU: 'Mauritius',
  MX: 'Meksyk',
  XL: 'Melilla',
  FM: 'Mikronezja',
  UM: 'Minor',
  MD: 'Mołdowa',
  MC: 'Monako',
  MN: 'Mongolia',
  MS: 'Montserrat',
  MZ: 'Mozambik',
  MM: 'Myanmar (Burma)',
  NA: 'Namibia',
  NR: 'Nauru',
  NP: 'Nepal',
  NL: 'Niderlandy (Holandia)',
  DE: 'Niemcy',
  NE: 'Niger',
  NG: 'Nigeria',
  NI: 'Nikaragua',
  NU: 'Niue',
  NF: 'Norfolk',
  NO: 'Norwegia',
  NC: 'Nowa Kaledonia',
  NZ: 'Nowa Zelandia',
  PS: 'Okupowane Terytorium Palestyny',
  OM: 'Oman',
  PK: 'Pakistan',
  PW: 'Palau',
  PA: 'Panama',
  PG: 'Papua Nowa Gwinea',
  PY: 'Paragwaj',
  PE: 'Peru',
  PN: 'Pitcairn',
  PF: 'Polinezja Francuska',
  PL: 'Polska',
  GS: 'Południowa Georgia i Połud.Wyspy Sandwich',
  PT: 'Portugalia',
  PR: 'Portoryko',
  CF: 'Rep.środkowoafrykańska',
  CZ: 'Republika Czeska',
  KR: 'Republika Korei',
  ZA: 'Republika Południowej Afryki',
  RE: 'Reunion',
  RU: 'Rosja',
  RO: 'Rumunia',
  RW: 'Rwanda',
  EH: 'Sahara Zachodnia',
  BL: 'Saint Barthelemy',
  KN: 'Saint Kitts i Nevis',
  LC: 'Saint Lucia',
  MF: 'Saint Martin',
  VC: 'Saint Vincent i Grenadyny',
  SV: 'Salwador',
  WS: 'Samoa',
  AS: 'Samoa Amerykańskie',
  SM: 'San Marino',
  SN: 'Senegal',
  RS: 'Serbia',
  SC: 'Seszele',
  SL: 'Sierra Leone',
  SG: 'Singapur',
  SK: 'Słowacja',
  SI: 'Słowenia',
  SO: 'Somalia',
  LK: 'Sri Lanka',
  PM: 'Saint Pierre i Miquelon',
  US: 'Stany Zjednoczone Ameryki',
  SZ: 'Suazi',
  SD: 'Sudan',
  SS: 'Sudan Południowy',
  SR: 'Surinam',
  SJ: 'Svalbard i Jan Mayen',
  SH: 'Święta Helena',
  SY: 'Syria',
  CH: 'Szwajcaria',
  SE: 'Szwecja',
  TJ: 'Tadżykistan',
  TH: 'Tajlandia',
  TW: 'Tajwan',
  TZ: 'Tanzania',
  TG: 'Togo',
  TK: 'Tokelau',
  TO: 'Tonga',
  TT: 'Trynidad i Tobago',
  TN: 'Tunezja',
  TR: 'Turcja',
  TM: 'Turkmenistan',
  TV: 'Tuvalu',
  UG: 'Uganda',
  UA: 'Ukraina',
  UY: 'Urugwaj',
  UZ: 'Uzbekistan',
  VU: 'Vanuatu',
  WF: 'Wallis i Futuna',
  VA: 'Watykan',
  HU: 'Węgry',
  VE: 'Wenezuela',
  GB: 'Wielka Brytania',
  VN: 'Wietnam',
  IT: 'Włochy',
  TL: 'Wschodni Timor',
  CI: 'Wybrzeże Kości Słoniowej',
  BV: 'Wyspa Bouveta',
  CX: 'Wyspa Bożego Narodzenia',
  IM: 'Wyspa Man',
  SX: 'Wyspa Sint Maarten (część holenderska wyspy)',
  CK: 'Wyspy Cooka',
  VI: 'Wyspy Dziewicze-USA',
  VG: 'Wyspy Dziewicze-W.B.',
  HM: 'Wyspy Heard i Mcdonald',
  CC: 'Wyspy Kokosowe (Keelinga)',
  MH: 'Wyspy Marshalla',
  FO: 'Wyspy Owcze',
  SB: 'Wyspy Salomona',
  ST: 'Wyspy Świętego Tomasza i Książęca',
  TC: 'Wyspy Turks i Caicos',
  ZM: 'Zambia',
  CV: 'Zielony Przylądek',
  ZW: 'Zimbabwe',
  AE: 'Zjednoczone Emiraty Arabskie',
  XI: 'Zjednoczone Królestwo (Irlandia Północna)',
};

export const FA3RolaPodmiotu3: Record<string, string> = {
  '1': 'Faktor - w przypadku gdy na fakturze występują dane faktora',
  '2': 'Odbiorca - w przypadku gdy na fakturze występują dane jednostek wewnętrznych, oddziałów, wyodrębnionych w ramach nabywcy, które same nie stanowią nabywcy w rozumieniu ustawy',
  '3': 'Podmiot pierwotny - w przypadku gdy na fakturze występują dane podmiotu będącego w stosunku do podatnika podmiotem przejętym lub przekształconym, który dokonywał dostawy lub świadczył usługę. Z wyłączeniem przypadków, o których mowa w art. 106j ust.2 pkt 3 ustawy, gdy dane te wykazywane są w części Podmiot1K',
  '4': 'Dodatkowy nabywca - w przypadku gdy na fakturze występują dane kolejnych (innych niż wymieniony w części Podmiot2) nabywców',
  '5': 'Wystawca faktury - w przypadku gdy na fakturze występują dane podmiotu wystawiającego fakturę w imieniu podatnika. Nie dotyczy przypadku, gdy wystawcą faktury jest nabywca',
  '6': 'Dokonujący płatności - w przypadku gdy na fakturze występują dane podmiotu regulującego zobowiązanie w miejsce nabywcy',
  '7': 'Jednostka samorządu terytorialnego - wystawca',
  '8': 'Jednostka samorządu terytorialnego - odbiorca',
  '9': 'Członek grupy VAT - wystawca',
  '10': 'Członek grupy VAT - odbiorca',
  '11': 'Pracownik',
};

export const FA2RolaPodmiotu3: Record<string, string> = {
  '1': 'Faktor - w przypadku, gdy na fakturze występują dane faktora',
  '2': 'Odbiorca - w przypadku, gdy na fakturze występują dane jednostek wewnętrznych, oddziałów, wyodrębnionych w ramach nabywcy, które same nie stanowią nabywcy w rozumieniu ustawy',
  '3': 'Podmiot pierwotny - w przypadku, gdy na fakturze występują dane podmiotu będącego w stosunku do podatnika podmiotem przejętym lub przekształconym, który świadczył usługę lub dokonywał dostawy. Z wyłączeniem przypadków, o których mowa w art. 106j ust.2 pkt 3 ustawy, gdy dane te wykazywane są w części Podmiot1K',
  '4': 'Dodatkowy nabywca - w przypadku, gdy na fakturze występują dane kolejnych (innych niż wymieniony w części Podmiot2) nabywców',
  '5': 'Wystawca faktury - w przypadku, gdy na fakturze występują dane podmiotu wystawiającego fakturę w imieniu podatnika. Nie dotyczy przypadku, gdy wystawcą faktury jest nabywca',
  '6': 'Dokonujący płatności - w przypadku, gdy na fakturze występują dane podmiotu regulującego zobowiązanie w miejsce nabywcy',
  '7': 'Jednostka samorządu terytorialnego - wystawca',
  '8': 'Jednostka samorządu terytorialnego - odbiorca',
  '9': 'Członek grupy VAT - wystawca',
  '10': 'Członek grupy VAT - odbiorca',
};

export const FA1RolaPodmiotu3: Record<string, string> = {
  '1': 'Faktor - w przypadku, gdy na fakturze występują dane faktora',
  '2': 'Odbiorca - w przypadku, gdy na fakturze występują dane jednostek wewnętrznych, oddziałów, wyodrębnionych w ramach nabywcy, które same nie stanowią nabywcy w rozumieniu ustawy',
  '3': 'Podmiot pierwotny - w przypadku, gdy na fakturze występują dane podmiotu będącego w stosunku do podatnika podmiotem przejętym lub przekształconym, który świadczył usługę lub dokonywał dostawy. Z wyłączeniem przypadków, o których mowa w art. 106j ust.2 pkt 3 ustawy, gdy dane te wykazywane są w części Podmiot1K',
  '4': 'Dodatkowy nabywca - w przypadku, gdy na fakturze występują dane kolejnych (innych niż wymieniony w części Podmiot2) nabywców',
  '5': 'Wystawca faktury - w przypadku, gdy na fakturze występują dane podmiotu wystawiającego fakturę w imieniu podatnika. Nie dotyczy przypadku, gdy wystawcą faktury jest nabywca',
  '6': 'Dokonujący płatności - w przypadku, gdy na fakturze występują dane podmiotu regulującego zobowiązanie w miejsce nabywcy',
};

export const TRolaPodmiotuUpowaznionegoFA3: Record<string, string> = {
  '1': 'Organ egzekucyjny - w przypadku, o którym mowa w art. 106c pkt 1 ustawy',
  '2': 'Komornik sądowy - w przypadku, o którym mowa w art. 106c pkt 2 ustawy',
  '3': 'Przedstawiciel podatkowy - w przypadku gdy na fakturze występują dane przedstawiciela podatkowego, o którym mowa w art. 18a - 18d ustawy',
};
export const TRolaPodmiotuUpowaznionegoFA2: Record<string, string> = {
  '1': 'Organ egzekucyjny - w przypadku, o którym mowa w art. 106c pkt 1 ustawy',
  '2': 'Komornik sądowy - w przypadku, o którym mowa w art. 106c pkt 2 ustawy',
  '3': 'Przedstawiciel podatkowy - w przypadku, gdy na fakturze występują dane przedstawiciela podatkowego, o którym mowa w przepisach art. 18a - 18d ustawy',
};
export const TRolaPodmiotuUpowaznionegoFA1: Record<string, string> = {
  '1': 'Organ egzekucyjny - w przypadku, o którym mowa w art. 106c pkt 1 ustawy',
  '2': 'Komornik sądowy - w przypadku, o którym mowa w art. 106c pkt 2 ustawy',
  '3': 'Przedstawiciel podatkowy - w przypadku, gdy w fakturze występują dane przedstawiciela podatkowego, o którym mowa w przepisach art. 18a - 18d ustawy',
};
export const FormaPlatnosci: Record<string, string> = {
  '1': 'Gotówka',
  '2': 'Karta',
  '3': 'Bon',
  '4': 'Czek',
  '5': 'Kredyt',
  '6': 'Przelew',
  '7': 'Mobilna',
};

export const RodzajTransportu: Record<string, string> = {
  '1': 'Transport morski',
  '2': 'Transport kolejowy',
  '3': 'Transport drogowy',
  '4': 'Transport lotniczy',
  '5': 'Przesyłka pocztowa',
  '7': 'Stałe instalacje przesyłowe',
  '8': 'Żegluga śródlądowa',
};

export const TypRachunkowWlasnych: Record<string, string> = {
  '1': 'Rachunek banku lub rachunek spółdzielczej kasy oszczędnościowo-kredytowej służący do dokonywania rozliczeń z tytułu nabywanych przez ten bank lub tę kasę wierzytelności pieniężnych',
  '2': 'Rachunek banku lub rachunek spółdzielczej kasy oszczędnościowo-kredytowej wykorzystywany przez ten bank lub tę kasę do pobrania należności od nabywcy towarów lub usług za dostawę towarów lub świadczenie usług, potwierdzone fakturą, i przekazania jej w całości albo części dostawcy towarów lub usługodawcy',
  '3': 'Rachunek banku lub rachunek spółdzielczej kasy oszczędnościowo-kredytowej prowadzony przez ten bank lub tę kasę w ramach gospodarki własnej, niebędący rachunkiem rozliczeniowym',
};

export const Procedura: Record<string, string> = {
  '1': 'Stawka 0% stosowana w ramach sprzedaży krajowej',
  '2': 'Stawka 0% - wewnątrzwspólnotowa dostawa towarów',
  '3': 'Stawka 0% - eksport towarów',
  '4': 'Dostawa towarów oraz świadczenie usług opodatkowane poza terytorium kraju',
  '5': 'Świadczenie usług z art. 100 ust. 1 pkt 4 ustawy',
  '6': 'Towar/usługa wymienione w załączniku 15',
  '7': 'Pozostała sprzedaż krajowa',
};

export const TableDataType: Record<string, FormatTyp> = {
  date: FormatTyp.Date,
  datetime: FormatTyp.DateTime,
  dec: FormatTyp.Currency,
  int: FormatTyp.Currency,
  time: FormatTyp.Time,
  txt: FormatTyp.Value,
};

export const TypLadunku: Record<string, string> = {
  '1': 'Bańka',
  '2': 'Beczka',
  '3': 'Butla',
  '4': 'Karton',
  '5': 'Kanister',
  '6': 'Klatka',
  '7': 'Kontener',
  '8': 'Kosz/koszyk',
  '9': 'Łubianka',
  '10': 'Opakowanie zbiorcze',
  '11': 'Paczka',
  '12': 'Pakiet',
  '13': 'Paleta',
  '14': 'Pojemnik',
  '15': 'Pojemnik do ładunków masowych stałych',
  '16': 'Pojemnik do ładunków masowych w postaci płynnej',
  '17': 'Pudełko',
  '18': 'Puszka',
  '19': 'Skrzynia',
  '20': 'Worek',
};

export const DEFAULT_TABLE_LAYOUT: {
  hLineWidth: () => number;
  hLineColor: () => string;
  vLineWidth: () => number;
  vLineColor: () => string;
} = {
  hLineWidth: (): number => 1,
  hLineColor: (): string => '#BABABA',
  vLineWidth: (): number => 1,
  vLineColor: (): string => '#BABABA',
};

export const TAXPAYER_STATUS: Record<string, string> = {
  '1': 'Stan likwidacji',
  '2': 'Postępowanie restrukturyzacyjne',
  '3': 'Stan upadłości',
  '4': 'Przedsiębiorstwo w spadku',
};
