#!/usr/bin/env python3
"""Aggregate dashboard_food_log.csv into dashboard_daily_summary.csv"""
import csv, os
from collections import defaultdict
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DATA_DIR = os.path.join(BASE_DIR, 'data')
LOG_CSV = os.path.join(DATA_DIR, 'dashboard_food_log.csv')
DAILY_CSV = os.path.join(DATA_DIR, 'dashboard_daily_summary.csv')

def run():
    sums=defaultdict(lambda: {'cal':0,'protein':0})
    if not os.path.exists(LOG_CSV):
        print('no log')
        return
    with open(LOG_CSV,encoding='utf-8') as f:
        r=csv.DictReader(f)
        for row in r:
            d=row['date']
            sums[d]['cal']+=float(row.get('calories') or 0)
            sums[d]['protein']+=float(row.get('protein_g') or 0)
    # read existing daily to preserve extras and normalize defaults
    existing={}
    if os.path.exists(DAILY_CSV):
        with open(DAILY_CSV,encoding='utf-8') as f:
            r=csv.DictReader(f)
            for row in r: existing[row['date']]=row
    with open(DAILY_CSV,'w',newline='',encoding='utf-8') as f:
        writer=csv.writer(f)
        writer.writerow(['date','cal','protein','steps','burned','creatine','supplements','last_updated'])
        for d,vals in sorted(sums.items()):
            ex=existing.get(d,{})
            steps = ex.get('steps') if ex.get('steps') not in (None,'') else '0'
            burned = ex.get('burned') if ex.get('burned') not in (None,'') else '0'
            creatine = ex.get('creatine') if ex.get('creatine') not in (None,'') else 'false'
            supplements = ex.get('supplements') if ex.get('supplements') not in (None,'') else '[]'
            last = ex.get('last_updated') or ''
            writer.writerow([d,int(vals['cal']),int(vals['protein']),steps,burned,creatine,supplements,last])
    print('updated',len(sums))

if __name__=='__main__':
    run()
