import csv, sys
from pathlib import Path

def make_brief(source):
    with Path(source).open(newline='', encoding='utf-8-sig') as stream:
        reader = csv.DictReader(stream)
        required = {'task', 'owner', 'status'}
        if not required.issubset(reader.fieldnames or []):
            raise ValueError('CSV must contain task, owner and status columns.')
        rows = list(reader)
    open_tasks = []
    for row in rows:
        task = (row.get('task') or '').strip()
        if not task:
            raise ValueError('Every row needs a task name.')
        status = (row.get('status') or '').strip().lower()
        if status not in {'open', 'done'}:
            raise ValueError('Every status must be open or done.')
        if status == 'open':
            owner = (row.get('owner') or '').strip() or 'Unassigned'
            open_tasks.append(f'- {task} — {owner}')
    return '# Project brief\n\nOpen tasks: '+str(len(open_tasks))+'\n\n'+'\n'.join(open_tasks)+'\n'

if __name__ == '__main__':
    if len(sys.argv) != 3:
        raise SystemExit('Usage: python automate.py tasks.csv brief.md')
    if Path(sys.argv[1]).resolve() == Path(sys.argv[2]).resolve():
        raise SystemExit('Choose an output path different from the input.')
    try:
        result = make_brief(sys.argv[1])
        Path(sys.argv[2]).write_text(result, encoding='utf-8')
        print('Wrote '+sys.argv[2])
    except (OSError, ValueError, csv.Error) as error:
        raise SystemExit('Could not create brief: '+str(error))
