import { RequestCluster } from '../../request-cluster';

function generateHostPage(
    cluster: RequestCluster,
    index: number,
    all_clusters: RequestCluster[]
): { title: string; elements: any[]; visibleIf?: string } {
    function f(name: string, c = cluster) {
        return `${c.id.replace(/\./g, '_')}|${name}`;
    }
    const previous_cluster: RequestCluster | null = index > 0 ? all_clusters[index - 1] : null;
    function defaultValue(name: string) {
        if (!previous_cluster) {
            return {};
        }
        return { defaultValueExpression: `{${f(name, previous_cluster)}}` };
    }
    const domain = cluster.id;
    const danych = cluster.getDataTypeDescription();
    return {
        title: cluster.id,
        elements: [
            {
                type: 'radiogroup',
                name: f('present'),
                isRequired: true,
                title: `Strona udostępniła właścicielowi domeny ${domain} ${danych}. Cel takiego przetwarzania danych:`,
                ...defaultValue('present'),
                visibleIf: '{popup_type} != "none"',
                choices: [
                    {
                        value: 'not_mentioned',
                        text: 'nie jest podany nigdzie na stronie',
                        visibleIf: "{policy_readable} = 'yes' ",
                    },
                    {
                        value: 'not_before_making_a_choice',
                        text: 'nie jest podany w żadnym miejscu na stronie, do którego można się dostać bez podejmowania wyboru dotyczącego przetwarzania danych osobowych',
                    },
                    {
                        value: 'mentioned_in_policy',
                        text: 'jest podany w polityce prywatności',
                        visibleIf: "{policy_readable} = 'yes' ",
                    },

                    {
                        value: 'mentioned_in_popup',
                        text: 'jest podany w okienku RODO',
                        visibleIf: "{popup_type} != 'none' ",
                    },
                ],
            },
            {
                type: 'radiogroup',
                name: f('legal_basis_type'),
                ...defaultValue('legal_basis_type'),
                isRequired: true,
                title: `Podstawa prawna dla tego konkretnego celu`,
                visibleIf: `{${f('present')}} notempty and {${f(
                    'present'
                )}} != "not_mentioned" and {${f('present')}} != "not_before_making_a_choice"`,
                choices: [
                    { value: 'consent', text: 'to zgoda (art. 6 ust. 1 lit. a RODO).' },
                    {
                        value: 'legitimate_interest',
                        text: 'to uzasadniony interes (art. 6 ust. 1 lit. f RODO).',
                    },
                    { value: 'not_mentioned', text: 'nie jest wskazana nigdzie na stronie.' },
                ],
            },
            {
                type: 'radiogroup',
                name: f('consent_problems'),
                ...defaultValue('consent_problems'),
                isRequired: true,
                title: `Jak ma się ta podstawa prawna do stanu faktycznego?`,
                visibleIf: `{${f('legal_basis_type')}} = "consent"`,
                defaultValueExpression:
                    'iif({popup_action} = "none" or {popup_action} = "closed_popup", "claims_consent_but_sends_before_consent", iif({popup_action} = "accept_all" and {rejection_is_hard} = "yes", "claims_consent_but_there_was_no_easy_refuse", ""))',
                choices: [
                    {
                        value: 'claims_consent_but_sends_before_consent',
                        text: `Strona wysłała {moje} dane do ${domain} zanim {wyraziłem} na to zgodę`,
                    },
                    {
                        value: 'claims_consent_but_there_was_no_easy_refuse',
                        text: '{Kliknąłem} przycisk od wyrażania zgody, ale w okienku o zgodę nie było natychmiastowo dostępnego przycisku do niewyrażenia zgody jednym kliknięciem',
                    },
                    { value: 'none', text: 'żadne z powyższych.' },
                ],
            },
            {
                type: 'radiogroup',
                name: f('legitimate_interest_activity_specified'),
                ...defaultValue('legitimate_interest_activity_specified'),
                isRequired: true,
                title: /* HTML */ `Czy administrator strony opisał szczegółowo, na czym polega
                uzasadniony interes w kontekście tego celu?`,
                visibleIf: `{${f('legal_basis_type')}} = "legitimate_interest"`,
                choices: [
                    {
                        value: 'precise',
                        text: /* HTML */ `Tak, wskazuje jasno na bieżące działania lub korzyści
                        wynikające z takiego przetwarzania danych.`,
                    },
                    {
                        value: 'vague',
                        text: `Wskazuje tylko ogólnie, jak np. „marketing” czy „statystyki”.`,
                    },
                    {
                        value: 'no',
                        text: `Nie. Nie wiadomo, na czym ten uzasadniony interes polega.`,
                    },
                ],
            },
            {
                type: 'text',
                title: `Jak administrator opisał to, na czym polega uzasadniony interes w kontekście ${domain}?`,
                name: f('legitimate_interest_description'),
                visibleIf: `{${f('legitimate_interest_activity_specified')}} = 'vague'`,
                placeholder: 'marketing',
                defaultValueExpression:
                    index == 0
                        ? 'marketing'
                        : `{${f(
                              'legitimate_interest_description',
                              previous_cluster || undefined
                          )}}`,
            },
            {
                type: 'radiogroup',
                title: `Czy domena ${domain} należy do podmiotu spoza Europy (np. Google, Facebook)?`,
                name: f('outside_eu'),
                ...defaultValue('outside_eu'),
                visibleIf: `{${f('legitimate_interest_activity_specified')}} = "precise" or {${f(
                    'consent_problems'
                )}} = "none"`,
                isRequired: true,
                choices: [
                    { value: 'yes', text: 'Tak' },
                    { value: 'no', text: 'Nie' },
                    { value: 'not_sure', text: 'Nie wiem' },
                ],
            },
            {
                type: 'radiogroup',
                title: `Czy w {Twojej} ocenie ujawnienie {Twoich} danych (${danych}) właścicielowi domeny ${domain} było konieczne do świadczenia zażądanej przez {Ciebie} usługi drogą elektroniczną?`,
                name: f('was_processing_necessary'),
                isRequired: true,
                ...defaultValue('was_processing_necessary'),
                visibleIf: `{${f('legal_basis_type')}} = "legitimate_interest" or {${f(
                    'present'
                )}} = "not_mentioned" or {${f(
                    'present'
                )}} = "not_before_making_a_choice" or {popup_type} = "none"`,
                choices: [
                    { value: 'yes', text: 'Tak, było konieczne' },
                    { value: 'no', text: 'Nie, nie było konieczne' },
                    { value: 'not_sure', text: 'Nie mam zdania' },
                ],
            },
        ],
    };
}

export default function generateSurveyQuestions(clusters: RequestCluster[]) {
    return {
        showQuestionNumbers: 'off',
        showProgressBar: 'top',
        pagePrevText: 'Wróć',
        pageNextText: 'Dalej',
        completeText: 'Dalej',
        locale: 'pl',
        clearInvisibleValues: 'onHidden',
        pages: [
            {
                title: 'Dodatkowe pytania',
                elements: [
                    {
                        type: 'html',
                        name: 'intro',
                        html: /* HTML */ `<p>
                            Analiza ruchu sieciowego generowanego przez stronę została zakończona.
                            Teraz, aby lepiej oszacować, gdzie są potencjalne obszary robocze pod
                            względem zgodności z RODO, możesz udzielić odpowiedzi na pytania
                            dotyczące funkcjonowania strony. Wtyczka wtedy wygeneruje raport lub
                            treść maila, którą możesz wysłać do administratora strony.
                        </p>`,
                    },
                ],
            },
            {
                title: 'Kontekst analizy',
                elements: [
                    {
                        type: 'radiogroup',
                        name: 'user_role',
                        title: 'Jestem:',
                        isRequired: true,
                        choices: [
                            { value: 'user', text: 'użytkownikiem strony' },
                            { value: 'admin', text: 'administratorem strony' },
                        ],
                    },
                    {
                        type: 'radiogroup',
                        name: 'email_type',
                        title: 'Chcę:',
                        visibleIf: "{user_role} = 'user'",
                        choices: [
                            {
                                value: 'polite_information',
                                text: 'uprzejmie poinformować administratora strony o potencjalnych problemach ze zgodnością z RODO na jego stronie',
                            },
                            {
                                value: 'official_request',
                                text: 'wysłać formalne zapytanie do administratora strony, na które ma obowiązek odpowiedzieć. Jeżeli administrator nie odpowie na takie zapytanie, może to być podstawą złożenia skargi do UODO',
                            },
                        ],
                    },
                    {
                        type: 'radiogroup',
                        name: 'zaimek',
                        title: 'Forma czasownika, jaka będzie użyta w raporcie:',
                        isRequired: true,
                        choices: [
                            { value: 0, text: 'wysłałem' },
                            { value: 1, text: 'wysłałam' },
                            { value: 2, text: 'wysłałom' },
                            { value: 3, text: 'wysłaliśmy' },
                        ],
                    },
                ],
            },
            {
                title: 'Obowiązek informacyjny i mechanizm pozyskiwania zgody',
                elements: [
                    {
                        type: 'radiogroup',
                        title: 'Jaką formę informacji o przetwarzaniu danych osobowych stosuje ta strona?',
                        name: 'popup_type',
                        isRequired: true,
                        choices: [
                            { value: 'none', text: 'Brak informacji' },
                            {
                                value: 'page',
                                text: 'Tylko w postaci tekstu na podstronie np. "prywatność" lub "polityka cookies"',
                            },
                            {
                                value: 'passive_popup',
                                text: /* HTML */ `Okienko o cookiesach, bez możliwości podjęcia
                                żadnego wyboru (np. tylko opcja „zamknij”)`,
                            },
                            {
                                value: 'some_choice',
                                text: 'Okienko o cookiesach, z możliwością podjęcia wyboru',
                            },
                        ],
                    },
                    {
                        type: 'checkbox',
                        title: /* HTML */ `Istnieje możliwość, że okienko z informacjami i wyborami
                        dotyczącymi przetwarzania {Twoich} danych osobowych ukazało się dawno temu w
                        trakcie {twojej} wcześniejszej wizyty i wtedy je {odkliknąłeś}. {Otwórz} tę
                        samą stronę w Trybie Prywatnym (Incognito). Co {widzisz}?`,
                        visibleIf: "{popup_type} = 'none' or {popup_type} = 'page'",
                        name: 'is_incognito_different',
                        isRequired: true,
                        choices: [
                            {
                                value: 'incognito_is_the_same',
                                text: 'W Trybie prywatnym {widzę} to samo, co {widziałem} w normalnym trybie',
                            },
                        ],
                    },
                    {
                        type: 'html',
                        visibleIf:
                            '{is_incognito_different} != "no" and ({popup_type} = "none" or {popup_type} = "page") ',
                        html: /* HTML */ `Jeżeli w trybie incognito {widzisz} więcej okienek z
                            informacjami o przetwarzaniu danych osobowych, {wykonaj} analizę w
                            normalnym trybie ponownie - ale najpierw {usuń} pliki cookies tej
                            strony.
                            <a
                                href="https://support.mozilla.org/pl/kb/usuwanie-ciasteczek-i-danych-stron-firefox?redirectslug=usuwanie-ciasteczek&redirectlocale=pl"
                                target="_blank"
                            >
                                {Zobacz}, jak to zrobić
                            </a>`,
                    },
                    {
                        type: 'radiogroup',
                        name: 'mentions_passive_consent',
                        isRequired: true,
                        visibleIf: '{popup_type} = "passive_popup"',
                        title: 'Czy treść okienka wskazuje na zgodę wyrażoną pasywnie, np. „Korzystając z naszej strony wyrażasz zgodę”,  „Brak zmiany ustawień przeglądarki oznacza zgodę”, „Klikając przycisk "X" (zamknij) wyrażasz zgodę”?',
                        choices: [
                            {
                                value: 'yes',
                                text: 'Tak',
                            },
                            {
                                value: 'no',
                                text: 'Nie',
                            },
                        ],
                    },
                    {
                        type: 'text',
                        name: 'passive_consent_description',
                        isRequired: true,
                        visibleIf: '{mentions_passive_consent} = "yes"',
                        title: 'Jakimi słowami administrator opisuje to pasywne wyrażenie zgody? Zacytuj wprost. Na przykład: „Korzystając ze strony wyrażasz zgodę”, albo „Pozostawiając ustawienia przeglądarki bez zmian (..) wyrażasz zgodę”',
                        defaultValue: 'Korzystając ze strony wyrażasz zgodę',
                    },
                    {
                        type: 'radiogroup',
                        name: 'cookie_wall',
                        isRequired: true,
                        visibleIf: '{popup_type} = "passive_popup"',
                        title: 'Czy treść strony jest wygodnie czytelna bez odkliknięcia tego okienka o RODO?',
                        choices: [
                            {
                                value: 'no', // wiem, że tu jest "no", a odpowiedź brzmi "tak" - ale nazwa pytania dotyczy obecności cookie walla
                                text: 'Tak, jest czytelna',
                            },
                            {
                                value: 'yes',
                                text: 'Nie. Jest zupełnie niewidoczna albo jest przesłonięta w stopniu uniemożliwiającym lub znacznie utrudniającym czytanie treści strony.',
                            },
                        ],
                    },
                    {
                        type: 'radiogroup',
                        name: 'rejection_is_hard',
                        isRequired: true,
                        visibleIf: '{popup_type} = "some_choice"',
                        title: 'Czy wyrażenie zgody na wszystkie cele jest dokładnie tak samo łatwe, jak odmowa zgody na wszystkie cele?',
                        choices: [
                            {
                                value: 'no', // wiem, że tu jest "no", a odpowiedź brzmi "tak" - ale nazwa pytania dotyczy braku równowagi
                                text: 'Tak. Opcja odmowy zgody na wszystkie cele jest równie widoczna i łatwo dostępna, co opcja wyrażenia zgody.',
                            },
                            {
                                value: 'yes',
                                text: 'Nie. {Muszę} wykonać więcej czynności (np. kliknięć) aby odmówić wszystkich zgód, albo opcja niewyrażenia zgody jest mało widoczna.',
                            },
                        ],
                    },
                    {
                        type: 'radiogroup',
                        name: 'popup_action',
                        isRequired: true,
                        visibleIf: '{popup_type} = "some_choice" or {popup_type} = "passive_popup"',
                        title: 'Jaką akcję {podjąłeś} w ramach wyskakującego okienka?',
                        choices: [
                            {
                                value: 'none',
                                text: 'Nic nie {kliknąłem}',
                            },
                            {
                                value: 'closed_popup',
                                text: '{Zamknąłem} okienko za pomocą przycisku „X” lub „Zamknij”, lub podobnego',
                            },
                            {
                                value: 'accept_all',
                                text: '{Kliknąłem} przycisk od akceptacji wszystkich zgód',
                            },
                            {
                                value: 'deny_all',
                                text: '{Odmówiłem} wyrażenia zgody na wszystkie cele',
                            },
                            {
                                value: 'other',
                                text: 'Coś innego',
                            },
                        ],
                    },
                    {
                        type: 'text',
                        name: 'popup_closed_how',
                        isRequired: true,
                        visibleIf: '{popup_action} = "closed_popup"',
                        title: 'W jaki sposób {zamknąłeś} okienko o zgodę? Opisz pełnym zdaniem',
                        defaultValueExpression: '{Kliknąłem} przycisk „X”.',
                    },
                    {
                        type: 'text',
                        name: 'popup_deny_all_how',
                        isRequired: true,
                        visibleIf: '{popup_action} = "deny_all"',
                        title: 'W jaki sposób {zamknąłeś} okienko o zgodę? Opisz pełnym zdaniem, np.: „{Kliknąłem} przycisk <Odrzuć wszystkie>” lub „{Odznaczyłem} wszystkie opcje w ustawieniach zaawansowanych”',
                        defaultValueExpression: '{Kliknąłem} przycisk „odmawiam wyrażenia zgody”.',
                    },
                    {
                        type: 'radiogroup',
                        name: 'administrator_identity_available_before_choice',
                        isRequired: true,
                        visibleIf: '{popup_type} = "some_choice"',
                        title: 'Czy przed podjęciem wyboru dot. {Twoich} danych {masz} możliwość poznać tożsamość administratora strony?',
                        choices: [
                            {
                                value: 'yes',
                                text: 'Tak.',
                            },
                            {
                                value: 'no',
                                text: 'Nie.',
                            },
                        ],
                    },
                ],
            },
            {
                title: 'Obowiązek informacyjny, polityka prywatności',
                visibleIf: "{popup_type} != 'none'",
                elements: [
                    {
                        type: 'radiogroup',
                        title: 'Czy polityka prywatności jest dostępna i czytelna?',
                        name: 'policy_readable',
                        isRequired: true,
                        choices: [
                            { value: 'yes', text: 'Dostępna i czytelna' },
                            {
                                value: 'entirely_obscured_by_popup',
                                text: 'Dostępna, ale nieczytelna. Zasłania ją całkowicie lub prawie całkowicie popup o RODO lub nie można się do niej doklikać bez podjęcia wyboru w okienku',
                            },
                            {
                                value: 'cant_find',
                                text: `Niedostępna. {Szukałem}, ale nie {znalazłem} jej na stronie`,
                            },
                        ],
                    },
                ],
            },
            ...clusters.map(generateHostPage),
        ],
    };
}
