import pygame

class Textbox():
    def __init__(self, size, x, y, font_size):
        self.background = pygame.Color("grey")
        self.surface = pygame.Surface( size )
        self.surface.fill( self.background )

        self.color = pygame.Color("White")
        self.fontsize = 20
        pygame.font.init()

        self.font = pygame.font.Font(pygame.font.get_default_font(), font_size)
        text = self.font.render("", True, self.color)
        self.surface.blit( text, (0,0) )

        self.x = x
        self.y = y

    def setText(self, text):
        self.lines = text.split('\n')
        self.nr_of_lines = len(self.lines)

    def setTextColor(self, color):
        try:
            self.color = pygame.Color(color)
        except:
            self.color = pygame.Color("black")

    def setBackgroundColor(self, color):
        try:
            self.background = pygame.Color(color)
        except:
            self.background = pygame.Color("grey")

    def get(self):
        return self.surface

    def getX(self):
        return self.x

    def getY(self):
        return self.y

    def update(self, value):
        self.surface.fill( self.background )

        for lineNr, line in enumerate(self.lines):
            text = self.font.render(line.format(value), True, self.color)
            spacing = text.get_height()//10
            x = self.surface.get_width()//2 - text.get_width()//2
            height_total = self.nr_of_lines * (text.get_height() + spacing)
            y = self.surface.get_height()//2 - height_total//2 + (lineNr * (text.get_height()+spacing))
            self.surface.blit( text, (x,y) )

