#!/usr/bin/env python
import os
import json
import hashlib
import logging
#import pandas as pd
import polars as pl

logging.basicConfig(level=logging.INFO)


def add_candidates(candidates):
    # sum totals and save to digests
    dirpath=f'build/_data/candidates'
    regions = os.listdir(dirpath)
    for region in regions:
        elections = os.listdir(f'{dirpath}/{region}')
        for election in elections:
            filenames = os.listdir(f'{dirpath}/{region}/{election}')
            for filename in filenames:
                if filename.endswith('.json'):
                    filepath = f'{dirpath}/{region}/{election}/{filename}'
                    with open(filepath, 'r', encoding='utf-8') as fp:
                        candidate = {}
                        data = json.load(fp)
                        candidate['filename'] = filename
                        candidate['election'] = f'{region}-{election}'
                        candidate['name'] = data['name']
                        supporting_money = data['supporting_money']
                        total_contributions = round(supporting_money['total_contributions'],2)
                        candidate['total_contributions'] = total_contributions

                        total_contributions_by_type = 0
                        contributions_by_type = supporting_money['contributions_by_type']
                        for key in contributions_by_type.keys():
                            total = contributions_by_type[key]
                            total_contributions_by_type += total
                        total = data.get('total_loans_received',0) or 0
                        total_contributions_by_type += total
                        total_contributions_by_type = round(total_contributions_by_type,2)
                        candidate['total_contributions_by_type'] = total_contributions_by_type

                        total_contributions_by_origin = 0
                        contributions_by_origin = supporting_money['contributions_by_origin']
                        for key in contributions_by_origin.keys():
                            total = contributions_by_origin[key]
                            total_contributions_by_origin += total
                        if 'Unitemized' in contributions_by_type:
                            total_contributions_by_origin += contributions_by_type['Unitemized']
                        total_contributions_by_origin += data.get('total_loans_received',0) or 0
                        total_contributions_by_origin = round(total_contributions_by_origin,2)
                        candidate['total_contributions_by_origin_with_unitemized'] = total_contributions_by_origin

                        candidates.append(candidate)



def main():
    candidates=[]
    add_candidates(candidates)
    df = pl.DataFrame(candidates)
    #df.to_csv('build/candidates.csv', index=False)
    df.write_csv('build/candidates.csv')
    #df.to_excel("build/candidates.xlsx", sheet_name="Totals Per Candidates", index=False)
    df.write_excel("build/candidates.xlsx", worksheet="Totals Per Candidates")

    from openpyxl import load_workbook
    workbook = load_workbook(filename="build/candidates.xlsx")
    sheet = workbook.active 
    num_rows = len(sheet['A'])
    sheet['G1'] = 'diff by type'
    sheet['H1'] = 'diff by source'
    for r in range(2,num_rows+1):
        sheet[f'G{r}'] = f'=E{r}-D{r}'
        sheet[f'H{r}'] = f'=F{r}-D{r}'
    sheet.column_dimensions['A'].width = 20
    sheet.column_dimensions['B'].width = 20
    sheet.column_dimensions['C'].width = 20
    sheet.column_dimensions['D'].width = 20
    sheet.column_dimensions['E'].width = 20
    sheet.column_dimensions['F'].width = 20
    sheet.column_dimensions['G'].width = 12
    sheet.column_dimensions['H'].width = 12
    workbook.save(filename="build/candidates.xlsx")

 
    
if __name__ == '__main__':
    main()
