#!/usr/bin/env python3
"""
Get roster of students for a Canvas course.
"""
import csv
import click
try:
    import common
except:
    from . import common

@click.command(context_settings={'help_option_names': ['-h', '--help']})
@click.argument(
    'course_id',
)
@click.option(
    '--output',
    '-o',
    help='Output file.',
)
def main(course_id, output=None):
    api_token = common.get_api_token()
    roster = get_roster(api_token, course_id)
    roster.sort(key=lambda item: item['login_id'])
    write_roster(roster, output)
    
def get_user(api_token, course_id, user_id):
    url = f'{common.API_URL_BASE}/courses/{course_id}/users/{user_id}'
    return common.get_unpaginated(api_token, url)

def get_roster(api_token, course_id):
    """Returns list of students for the given course."""
    # Request parameters
    params = {'enrollment_type': ['student']}
    url = f'{common.API_URL_BASE}/courses/{course_id}/users'
    return common.get_paginated(api_token, url, params)

def write_roster(roster, output):
    if output is None:
        for item in roster:
            print(f'{item["login_id"]}@umich.edu')
        return
    filtered = ((item['sortable_name'],
                 f'{item["login_id"]}@umich.edu',
                 item['sis_user_id'])
                for item in roster)
    with open(output, 'w') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(('Full Name', 'Email', 'SID'))
        for item in filtered:
            writer.writerow(item)
            
if __name__ == '__main__':
    main()