# -*- coding: Latin-1 -*-
# Visar sortering av listor med objekt

import copy

class Video(object):
    """Representerar en YouTube-video"""

    def __init__(self, namn, kategori, minuter):
        """Konstruktorn"""
        self.namn = namn         # Videofilmens namn (sträng)
        self.kategori = kategori # Kategori: komedi, nyheter, osv (sträng)
        self.minuter = minuter   # Videons längd i minuter (flyttal)
        self.visningar = 0       # Totalt antal visningar (heltal)
        self.betyg = []          # Betyg (lista)

    def __str__(self):
        """För kontrollutskrift"""
        return self.namn + "/" + self.kategori + "/" + str(self.minuter)

    def skrivInfo(self):
        """För informtiv utskrift"""
        print("________________________________________________________________________")
        print("Filnamn: ", self.namn)
        print("Kategori: ", self.kategori)
        print("Längd ", self.minuter)
        print("Filmen har visats ", self.visningar, "gånger. Medelbetyg:", self.medelBetyg())
        print("________________________________________________________________________")


    @staticmethod
    def tabellRubrik():
        """Skriver ut tabellrubrik (använder inga attribut)"""
        print("Film" + " "*51 + " Betyg  Visningar ")

    def tabellRad(self):
        """Skriver ut en tabellrad formatterat"""
        print(format(self.namn,"55s"), format(self.medelBetyg(),"5.1f"), format(self.visningar,"10d"))

    def namnet(self):
        """Returnerar filmens namn"""
        return self.namn

    def seVisningar(self):
        """Returnerar antal visningar av filmen"""
        return self.visningar

    def ny_visning(self):
        """Ökar antal visningar"""
        self.visningar += 1

    def nyttBetyg(self, b):
        """Lägger in nytt betyg i betygslistan"""
        self.betyg.append(int(b))

    def medelBetyg(self):
        """Beräknar medelbetyg (som flyttal)"""
        antal = len(self.betyg)
        if antal > 0:
            return sum(self.betyg)/float(antal)
        else:
            return 0

##############  Här slutar klassen Video ###########

def lasFilen(filnamn):
    """Läser in filmerna från filen, skapar Video-objekt och
       lagrar i en lista, som returneras"""
    filen = open(filnamn,"r")
    listan = []
    namn = filen.readline().strip()
    while namn:
        kategori = filen.readline().strip()
        minuter = float(filen.readline().strip())
        film = Video(namn, kategori, minuter)
        tomrad = filen.readline()
        listan.append(film)
        namn = filen.readline().strip()
    return listan


def showList(listan):
    """Visar en numrerad lista med filmer"""
    print("\n Följande filmer kan du välja bland:")
    nr = 0
    for film in listan:
        nr += 1
        print("  " + str(nr) + ". " + film.namn)

def titta(listan):
    """Titta på information om, och betygssätta filmer"""
    klar = False
    while not klar:
        showList(listan)
        svar = input("Vilken film vill du se (ange nr)?")
        if svar:
            index = int(svar) - 1
            film = listan[index]
            film.skrivInfo()
            film.ny_visning()
            b = input('Vilket betyg vill du ge "' + film.namnet() + '"? ')
            film.nyttBetyg(b)
        else:
            klar = True

def meny(listan):
    """Hanterar menyval"""
    print("Välkommen, här kan du betygssätta filmer!")
    klar = False
    while not klar:
        print("  1. Betygssätta filmer")
        print("  2. Sortera efter antal visningar")
        print("  3. Sortera efter medelbetyg")
        svar = input("Vad vill du göra? ")
        if svar == "1":
            titta(listan)
        elif svar == "2":
            kopia = copy.deepcopy(listan)            
            kopia.sort(key=Video.seVisningar,reverse=True)
            Video.tabellRubrik()
            print("________________________________________________________________________")
            for film in kopia:
                film.tabellRad()
            print("________________________________________________________________________")
        elif svar == "3":
            kopia = copy.deepcopy(listan)            
            kopia.sort(key=Video.medelBetyg,reverse=True)
            Video.tabellRubrik()
            print("________________________________________________________________________")
            for film in kopia:
                film.tabellRad()
            print("________________________________________________________________________")
        else:
            klar = True

def main():
    listan = lasFilen("YouTube.txt")
    meny(listan)    

################ Huvudprogram ########################
main()
