#!/usr/bin/env python3

import argparse
import datetime
from sqlalchemy import or_
import sys

import mo
import mo.config as config
import mo.db as db
from mo.util import die, init_standalone

parser = argparse.ArgumentParser(description='Vygeneruje seznam mailových adres')
parser.add_argument('typ', type=str, help='Druh seznamu (zatím jen "garanti-z")')

args = parser.parse_args()

init_standalone()

if args.typ != 'garanti-z':
    die("Neznámý typ mailing listu")

sess = db.get_session()
users = (sess.query(db.User)
         .join(db.UserRole, db.UserRole.user_id == db.User.user_id)
         .filter(db.UserRole.role.in_([db.RoleType.garant_okres, db.RoleType.garant_kraj, db.RoleType.garant]))
         .filter(or_(db.UserRole.year == None, db.UserRole.year == config.CURRENT_YEAR))
         .filter(or_(db.UserRole.category == None, db.UserRole.category != 'P'))
         .all())
addrs = set(u.email for u in users)

if hasattr(config, 'MAILING_LIST_INCLUDE') and args.typ in config.MAILING_LIST_INCLUDE:
    for addr in config.MAILING_LIST_INCLUDE[args.typ]:
        addrs.add(addr)
if hasattr(config, 'MAILING_LIST_EXCLUDE') and args.typ in config.MAILING_LIST_EXCLUDE:
    for addr in config.MAILING_LIST_EXCLUDE[args.typ]:
        addrs.discard(addr)

for a in sorted(addrs):
    print(a)