import { RequestCluster } from '../../../request-cluster';
import { wordlist } from '../../../util';
import { ExplainerKey } from '../explainers';
import { ParsedAnswers } from '../parse-answers';
import { v } from '../verbs';
import { Problem } from './problem';

export class UnlawfulCookieAccess extends Problem {
   getNecessaryExplainers(): ExplainerKey[] {
      return [];
   }

   static qualifies(answers: ParsedAnswers, clusters: RequestCluster[]): boolean {
      // są cookiesy, nie było zgody, nie są konieczne do działania strony
      const cookie_clusters = Object.values(clusters).filter((c) => c.hasMarkedCookies());
      return cookie_clusters.some((cluster) => {
         const hostAnswers = answers.hosts[cluster.id];
         return (
            (hostAnswers.present == 'not_mentioned' ||
               hostAnswers.present == 'not_before_making_a_choice' ||
               ['none', 'closed_popup', 'deny_all'].includes(answers.popup_action) ||
               answers.popup_type === 'none') &&
            hostAnswers.was_processing_necessary != 'yes'
         );
      });
   }

   getEmailContent() {
      const cookie_clusters = Object.values(this.clusters).filter((c) => c.hasMarkedCookies());
      const unnecessary_hosts = Object.entries(this.answers.hosts)
         .filter(([, answers]) => answers.was_processing_necessary === 'no')
         .map(([host]) => host);
      const maybe_unnecessary_hosts = Object.entries(this.answers.hosts)
         .filter(([, answers]) => answers.was_processing_necessary === 'not_sure')
         .map(([host]) => host);
      const _ = (key: string) => v(key, this.answers.zaimek);
      return (
         <>
            <h2>Dostęp do cookies niezgodny z ustawą Prawo Telekomunikacyjne</h2>
            <p>
               Państwa strona dokonała odczytu plików Cookie zapisanych na dysku twardym mojego
               komputera. Dotyczy to plików cookie przypisanych do domen:
            </p>
            <ul>
               {cookie_clusters.map((cluster, index) => {
                  const names = cluster
                     .getMarkedEntries()
                     .filter((e) => e.source === 'cookie')
                     .map((e) => e.name);

                  return (
                     <li>
                        {cluster.id} ({names.length > 1 ? 'pliki' : 'plik'}{' '}
                        {names.map((name, index) => {
                           return (
                              <>
                                 {index > 0 ? ', ' : ''}
                                 {name}
                              </>
                           );
                        })}
                        ){index === cookie_clusters.length - 1 ? '.' : ';'}
                     </li>
                  );
               })}
            </ul>
            <p>
               Zgodnie z treścią Art. 173.{' '}
               <a href="https://isap.sejm.gov.pl/isap.nsf/download.xsp/WDU20041711800/U/D20041800Lj.pdf">
                  ustawy Prawo Telekomunikacyjne
               </a>
               , strona może pozyskać dostęp do treści plików cookies pod warunkiem spełnienia
               jednego z następujących warunków:
            </p>
            <ol>
               <li>
                  Użytkownik wyraził zgodę na takie przetwarzanie danych <em>po</em> tym, jak został
                  poinformowany bezpośrednio o celu uzyskania dostępu do tej informacji;
               </li>
               <li>
                  Dostęp do treści plików cookies jest konieczny do dostarczania usługi świadczonej
                  drogą elektroniczną zażądanej przez użytkownika.
               </li>
            </ol>
            {(() => {
               if (this.answers.popup_type == 'none' || this.answers.popup_type == 'page') {
                  return (
                     <p>
                        Jako, że strona nie pytała {_('mnie')} nigdy o zgodę, nie jest spełniony
                        warunek 1.
                     </p>
                  );
               } else if (this.answers.popup_type === 'passive_popup') {
                  return (
                     <p>
                        Państwa strona nie dała mi nigdy faktycznego wyboru dotyczącego wyrażenia
                        lub odmówienia zgody na takie przetwarzanie danych osobowych, dlatego nie
                        jest spełniony warunek 1.{' '}
                        {this.answers.mentions_passive_consent ? (
                           <>
                              Zgody wyrażonej w sposób bierny lub milczący nie można uznać za ważną
                              w świetle obowiązujących przepisów rozporządzenia 2016/679. Dlatego
                              zaniechanie zmiany ustawień przeglądarki lub po prostu korzystanie ze
                              strony nie stanowi ważnej zgody. Takie jest{' '}
                              <a href="https://assets.midline.pl/pisma/2021-12-16%20odpowiedz%20UODO%20na%20skarg%C4%99%20i(n)Secure.pdf">
                                 stanowisko polskiego UODO
                              </a>
                              .
                           </>
                        ) : (
                           ''
                        )}
                     </p>
                  );
               } else if (this.answers.popup_type === 'some_choice') {
                  if (this.answers.popup_action === 'none') {
                     return (
                        <p>
                           Nie {_('wyraziłem')} zgody na takie przetwarzanie {_('moich')} danych
                           osobowych. W okienku pytającym o zgodję nic nie {_('kliknąłem')}. Nie
                           jest zatem spełniony warunek 1.
                        </p>
                     );
                  } else if (this.answers.popup_action === 'closed_popup') {
                     return (
                        <p>
                           Nie {_('wyraziłem')} zgody na takie przetwarzanie {_('moich')} danych
                           osobowych. {this.answers.popup_closed_how.trim()}
                           {this.answers.popup_closed_how.trim().at(-1) != '.' ? '.' : ''} Takiego
                           działania nie można uznać za ważną zgodę na przetwarzanie danych
                           osobowych, gdyż nie spełnia warunku jednoznaczności opisanego w Art. 4,
                           pkt 11 RODO. Nie jest zatem spełniony warunek 1.
                        </p>
                     );
                  } else if (this.answers.popup_action == 'deny_all') {
                     return (
                        <p>
                           {this.answers.popup_deny_all_how.trim()}
                           {this.answers.popup_closed_how.trim().at(-1) != '.' ? '.' : ''} Zatem nie
                           jest spełniony warunek 1.
                        </p>
                     );
                  }
               }
            })()}
            {unnecessary_hosts.length > 0 ? (
               <p>
                  W {_('mojej')} ocenie odczytywanie przez Państwa stronę treści plików cookies z{' '}
                  {wordlist(unnecessary_hosts)} nie jest konieczne do wyświetlenia treści Państwa
                  strony, dlatego nie jest dla nich spełniony warunek 2. Jeżeli Państwa zdaniem jest
                  inaczej, {_('proszę')} o wskazanie, co jest źródłem tej konieczności i co odróżnia
                  Państwa stronę od wielu innych stron, które realizują te same funkcjonalności{' '}
                  <em>bez</em> korzystania z plików Cookie.
               </p>
            ) : (
               ''
            )}
            <p>
               {_('Proszę')} o wskazanie, czy być może stosowali Państwo inną podstawę prawną do
               takiego przetwarzania {_('moich')} danych osobowych, czy przetwarzali je państwo bez
               ważnej podstawy prawnej?
            </p>
            {maybe_unnecessary_hosts.length > 1 ? (
               <p>
                  {_('Proszę')} też o wskazanie, czy dostęp do treści plików cookie z
                  {wordlist(maybe_unnecessary_hosts)} jest konieczny do poprawnego działania strony?
                  Jeżeli tak, to {_('proszę')} wskazać, w jaki sposób. Co sprawia, że strona nie
                  może działać bez nich?
               </p>
            ) : (
               ''
            )}
         </>
      );
   }
}
