import requests
import time
import json
import re
import pygame
import random


def getLatestComment():

    url = "https://api.pushshift.io/reddit/search"
    querystring = {"sort":"desc","sort_type":"retrieved_on","limit":"1","lang":"eng"}
    response = requests.request("GET", url, params=querystring)
    d = json.loads(response.text)
    comment = str(d['data'][0]['body'])
    comment = comment.replace("'", "")
    print('Comment: ' + comment)
    return comment

def getSentimentScore(comment):

    url = "https://westeurope.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment"

    payload = '{"documents": [{"text":"' + comment + '",  "language": "en", "id":"1"}]}'

    headers = {
        'ocp-apim-subscription-key': "xxxxxxx",
        'content-type': "text/json; charset=utf-8",
        'cache-control': "no-cache"
    }

    try:

        response = requests.request("POST", url, data=payload.encode('utf-8'), headers=headers)

        d = json.loads(response.text)
        score =  float(d['documents'][0]['score'])

    except Exception:
        score = random.random()

    print('Score: '  + str(score))
    return score


def run(fillScreen):

    divides = 4
    widthSteps = width/divides
    heightSteps = height/divides
    positions = []

    size = (steps,steps)

    for block in range(divides):

        if block == 0 or block == 2:
            startX = 0
        else:
            startX = (widthSteps * 2)

        if block == 0 or block == 1:
            startY = 0
        else:
            startY = (heightSteps * 2) 

        startPositions = (startX,startY)
     
        for segment in range(divides):

            if segment % 2 != 0:
                posX = startX + (widthSteps * 2 - steps)
            else:
                posX = startX

            if segment == 2 or segment == 3:
                posY = startY + (heightSteps * 2 - steps)
            else:
                posY = startY

            position = (posX,posY)
            positions.append(position)

    rightDown = [0,4,8,12]
    rightUp =   [2,6,10,14]

    
    leftDown = [1,5,9,13]
    leftUp =   [3,7,11,15]

    for i in range(120):

        index = 0

        if fillScreen == False:
            time.sleep(2)
            comment = getLatestComment()
            score = getSentimentScore(comment)
            randomColour = 255 * score
        else:
            randomColour = random.random() * 255

    
        colour = (255,randomColour,randomColour)

        
        for position in positions:
            
            pygame.draw.rect(surface,colour,(position,size))
            pygame.display.update()

            if index in rightDown:

                if index == 0 or index == 8:
                    if position[0] == 420:
                        position = (0 , position[1] + steps)
                    else:
                        position = (position[0] + steps, position[1])

                elif index == 4 or index == 12:
                    if position[0] == 1320:
                        position = (900 , position[1] + steps)
                    else:
                        position = (position[0] + steps, position[1])


            elif index in rightUp:

                if index == 2 or index == 10:
                    if position[0] == 420:
                        position = (0 , position[1] - steps)
                    else:
                        position = (position[0] + steps, position[1])

                elif index == 6 or index == 14:
                    if position[0] == 1320:
                        position = (900 , position[1] - steps)
                    else:
                        position = (position[0] + steps, position[1])


            elif index in leftDown:

                if index == 1 or index == 9:
                    
                    if position[0] == 450:
                        position = (870 , position[1] + steps)
                    else:
                        position = (position[0] - steps, position[1])

                elif index == 5 or index == 13:

                    if position[0] == 1350:
                        position = (1770 , position[1] + steps)
                    else:
                        position = (position[0] - steps, position[1])

            if index in leftUp:

                if index == 3 or index == 11:
                    
                    if position[0] == 450:
                        position = (870 , position[1] - steps)
                    else:
                        position = (position[0] - steps, position[1])

                elif index == 7 or index == 15:

                    if position[0] == 1350:
                        position = (1770 , position[1] - steps)
                    else:
                        position = (position[0] - steps, position[1])
            
            
            positions[index] = position
            index += 1





pygame.init()
width = 1800
height = 960
steps = 30

#Create a displace surface object
surface = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)

run(True)

while True:
    run(False)
