#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri May  1 17:30:27 2020

@author: Nasser Fathi

dit script zoekt alle tags van de VN op en creeërt een nieuwe csv bestand en zo

"""

import csv


class game(object):
    
    def __init__(self, visualNovelID, englishName):
        self.visualNovelID = visualNovelID
        self.englishName = englishName
        self.tags = {}
  
    def get_englishName(self):
        return self.englishName
    
    def get_visualNovelID(self):
        return self.visualNovelID
    
    def get_tags(self):
        return self.tags
    
    def add_tag(self, newTagID):
        if newTagID in self.tags.keys():
            self.tags[newTagID] += 1
        else:
            self.tags[newTagID] = 1
            
    


def bindTags(visualNovelFile, tagFile, VisualNovelTagFile):
    '''
    voor elk visual novel zal er een tag opgezocht worden. indien een tag
    meerdere keren voorkomt, wordt dit opgetelt
    
    INPUT = alle .csv bestanden
    OUTPUT = een lijst van game objecten met tags
    '''
    gameList = createObject(visualNovelFile)
    tagDictionary = tagTable(tagFile)
    
    #tag met visual novel verbinden
    with open(VisualNovelTagFile, newline='') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            it = 0
            for gameObject in gameList:
                if gameObject.get_visualNovelID() == row['vid']:
                    gameList[it].add_tag(tagDictionary[row['tag']])
                else:
                    pass
                it += 1
    return gameList

def createObject(visualNovelFile):
    '''
    initialiseren van objecten
    
    INPUT = visualNovel .csv bestand
    OUTPUT = een lijst van game objecten
    '''
    gameList = []
    with open(visualNovelFile, newline='') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            gameList.append(game(row['id'], row['title']))
    return gameList
    
def tagTable(tagFile):
    '''
    creeërt een dictionary waar men aan de hand van een tag id een leesbare id
    terug krijgt
    
    INPUT = .csv tagFile
    OUTPUT = dictionary 
    '''
    dictionary = {}
    with open(tagFile, newline='') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            dictionary[row["id"]] = row["name"]       
    return dictionary

def createCSV(gameObjectList):
    '''
    voor elk game object wordt een .csv bestand gegenereerd met de tags + 
    aantal
    
    INPUT = gameObjectList
    OUTPUT = None
    '''
    separator = ";"
    
    for gameObject in gameObjectList:
        # een nieuwe bestand op de pc creeëren
        f = open(gameObject.get_englishName() + ".csv", "a")
        
        f.write("tag name" + separator + "aantal\n")
        
        for tagName in gameObject.get_tags().keys():    
            f.write(tagName + separator + str(gameObject.get_tags()[tagName]) + "\n")
        f.close()

###MAIN###

visualNovelFile = "vn.csv"
tagFile = "tags.csv"
VisualNovelTagFile = "tags_vn.csv"

#tags verbinden aan een visual novel
objectList = bindTags(visualNovelFile, tagFile, VisualNovelTagFile)

#bestanden genereren
createCSV(objectList)
