from csv2html import id2item2score


progress_presentation_ratio = 0.3
progress_report_ratio = 0.25
final_ratio =  0.15 + 0.3

gpa  = ['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'F']
dist = [ 9, 11, 15, 2, 0, 0, 0, 0, 0, 0]


def get_avg(item2score):
    avg = 0.0
    for item, score in item2score.items():
        if item != 'grade' and score != '':
            score = float(score)
            if 'progress_presentation' in item:
                avg += score / 2. * progress_presentation_ratio
            elif 'progress_report' in item:
                avg += score * progress_report_ratio
            elif 'final' in item:
                avg += score * final_ratio
    return avg

id_avgs = []
for id_, item2score in id2item2score.items():
    id_avgs.append((id_, get_avg(item2score)))
id_avgs.sort(key=lambda x: x[1], reverse=True)
#print(len(list(id2item2score)))

with open('students.csv', 'r') as F:
    all_students = []
    for f in F:
        f = f.split(',')[0]
        if 'auditor' in f:
            f = f.split('auditor_')[1]
        if 'ntust' in f:
            f = f.split('ntust_')[1]
        all_students += [f]

with open('scores_avg.csv', 'w') as f:
    print('SID,Total Score', file=f)
    check_student_list = []
    for id, avg in id_avgs:
        check_student_list += [id]
        print(f'{id},{round(avg, 2)}', file=f)

    for id in all_students:
        if id not in check_student_list:
            print(f'{id},0', file=f)
        

with open('scores_grade.csv', 'w') as f:
    print('SID,Total Score', file=f)

    ids = iter(id_avg[0] for id_avg in id_avgs)
    for num, grade in zip(dist, gpa):
        for i in range(num):
            print(f'{next(ids)},{grade}', file=f)
