from shiny import module, ui, render
import json
from datetime import datetime


@module.ui
def welcome_ui():
    return ui.div(
        ui.h2("Projekt Copbird: Eine Zusammenfassung"),
        ui.h3("Allgemeines"),
        ui.markdown("""
            Copbird ist ein Projekt der [AG-Link][0].
            Im Rahmen dieses Projektes entstand ein Stück Software, dass es uns ermöglicht hat viele tausend Tweets von fast allen Twitter Accounts der Polizei abzurufen und zu speichern.
            Die Idee hinter diesem Projekt war es, der exekutiven Gewalt auch im digitalen Raum genauer auf die Finger zu schauen.
            Denn Twitter und andere Social Media Kanäle sind mittlerweile weit mehr als einfache Informationskanäle.
            Es wird Werbung betrieben, gezielt Lügen oder sogenannte „Fake News“ verbreitet, politische Ideologien verfochten und meistens auch einfach nur Memes ausgetauscht.
            Doch welche Rolle nimmt dabei die Polizei genau ein und was macht sie auf Twitter?

            [0]: https://ag-link.xyz
            """),
        ui.output_ui("dataset_infos"),
        ui.h3("Ursprung der Idee"),
        ui.markdown("""
            Die Idee für dieses Projekt überkam uns bei einem Vortrag der KEW (Kritische Einführungswochen) an der Universität Leipzig im Herbst 2020. Im Zuge eines Vortrages von Copwatch Leipzig wurde dort die Rolle der Polizei auf Twitter zu den Ausschreitungen zum G20 2017 in Hamburg erläutert.
            Dieser Vortrag stellte heraus, dass die Polizeikräfte im Vorfeld der Demonstration sich ordentlich mit ihrem Inventar & Fuhrpark gebrüstet haben.
            Es war eine Demonstration der Macht und ein klares Signal an alle Demonstrierenden: „Wir sind auf alles vorbereitet – vor allem auf Eskalation“.
            Dieses zur Schau stellen von Macht, war eine deutliche Kampfansage an alle, die sich in Hamburg versammelt haben, um gegen den G20 Gipfel zu demonstrieren.
            Und die Fronten waren von Anfang an klar.
            So hat die Polizei in ihrer theoretisch neutralen Rolle die Bevölkerung zu informieren versagt und von Anfang an zur eskalierenden Stimmungsmache, die zur „Welcome to Hell“ Demonstration einen Höhepunkt erreicht hat, beigetragen.

            Doch nicht nur das, laut einer [Studie][0]  wurden während des Geschehens von Medienakteuren, den schnell abgesetzten Tweets der Polizei zur aktuellen Lage von Blockaden und Ausschreitungen schnell vertraut, obwohl die Polizei ein Teil der Konfliktpartei.
            Einige der abgesetzten Tweets zur Dynamik der Veranstaltung und den Ausschreitungen haben sich schlussendlich sogar als falsch herausgestellt, wodurch bewusst oder unbewusst Falschinformationen verbreitet wurden.

            Der Vortrag von Copwatch Leipzig hat genau solche Tweets analysiert und Folgen davon vorgestellt. Dies geschah aber von Hand, also die Tweets wurden nicht maschinell herausgesucht, verarbeitet und analysiert, sondern in mühseliger Handarbeit selektiert und analysiert.
            Als Gruppe von Technik-Interessierten Menschen dachten wir uns darauf hin, warum nicht einfach ALLE Tweets der Polizei sammeln und automatisiert analysieren, um herauszufinden ob wir solche Untersuchungen, wie von Copwatch Leipzig oder der G20 Studie, nicht auch automatisieren könnten.

            [0]: https://g20.protestinstitut.eu/
            """),
        ui.h3("Vortragswoche"),
        ui.markdown("""Infos zur Vortragswoche"""),
        ui.h3("Hackathon"),
        ui.markdown(
            """Link zu netzpolitik Artikel: https://netzpolitik.org/2021/copbird-hackathon-auf-twitter-macht-jede-polizei-ihr-eigenes-ding/"""),
        ui.h3("Das Ende der Twitter API"),
        ui.markdown(""":(""")
    )


with open("data/general_analysis_results.json", "r") as f:
    general_analysis_dict = json.load(f)


@ module.server
def welcome_server(input, output, session):
    @output
    @render.ui
    def dataset_infos():
        date_format_str = "%Y-%m-%d %H:%M:%S"

        tweet_count = general_analysis_dict["tweet_count"]
        hashtags = general_analysis_dict["hashtags"]
        mentions = general_analysis_dict["mention"]
        url = general_analysis_dict["url"]
        num_police_accounts = general_analysis_dict["num_police_accounts"]
        date_first_tweet = datetime.strptime(general_analysis_dict["date_first_tweet"], date_format_str).strftime("%d.%m.%Y")
        date_last_tweet = datetime.strptime(general_analysis_dict["date_last_tweet"], date_format_str).strftime("%d.%m.%Y")
        day_diff = general_analysis_dict["day_diff"]
        num_text_tokens = general_analysis_dict["num_text_tokens"]

        return ui.markdown(f"""
        **Datensatz Übersicht:**

        Anzahl Tweets: **{tweet_count}**<br>
        Anzahl Wörter/ Satzzeichen/ Emojis: **{num_text_tokens}**<br>
        Anzahl Hashtahs in Tweets: **{hashtags}**<br>
        Anzahl Erwähnungen in Tweets: **{mentions}**<br>
        Anzahl Links in Tweets: **{url}**<br>
        Anzahl Polizei Accounts: **{num_police_accounts}** (incl. Zoll, Bundespolizei, BKA, etc.)<br>
        Datum des ersten Tweets: **{date_first_tweet}**<br>
        Datum des letzter Tweets: **{date_last_tweet}**<br>
        Anzahl Tage mit gesammelten Tweets: **{day_diff}**
        """)
