import requests
import argparse
import os
import json

# get absolute paths
source = os.path.dirname(__file__)
parent = os.path.abspath(source + '/../../')

# load vars file
email_vars_file = open(parent + '/email_account_vars.json')
server_vars_file = open(parent + '/email_server_vars.json')
email_vars = json.load(email_vars_file)
server_vars = json.load(server_vars_file)
# cleanup
email_vars_file.close()
server_vars_file.close()

# instantiate vars
mailcowserver = server_vars['server_info']['mail_server']
mailcowtoken = server_vars['server_info']['mailcow_api_key']
domain = server_vars['server_info']['domain']
account_list = email_vars['account_list']


class Mailbox:
    def __init__(self, local_part, full_name, password):
        self.local_part = local_part
        self.domain = domain
        self.name = full_name
        self.quota = 3096
        self.password = password
        self.password2 = password
        self.active = True
        self.force_pw_update = False
        self.tls_enforce_in = True
        self.tls_enforce_out = True

    def __iter__(self):
        yield 'local_part', self.local_part
        yield 'domain', self.domain
        yield 'name', self.name
        yield 'quota', self.quota
        yield 'password', self.password
        yield 'password2', self.password2
        yield 'active', self.active
        yield 'force_pw_update', self.force_pw_update
        yield 'tls_enforce_in', self.tls_enforce_in
        yield 'tls_enforce_out', self.tls_enforce_out


api_url = 'https://' + mailcowserver + '/api/v1/'
request_url = api_url + 'add/mailbox/'


# TODO need to make a domain check to make sure domain actually exists on server else failures could be confusing


def create_mailboxes():
    # construct mailbox objects fron list
    mailbox_list = []
    for account in account_list:
        mailbox_objct = Mailbox(*account.values())
        mailbox_list.append(mailbox_objct)

    headers = {
        'Content-Type': 'application/json',
        'X-API-Key': mailcowtoken
    }
    for mlbx in mailbox_list:
        try:
            response = requests.post(request_url, headers=headers, json=dict(mlbx))
            fmt_response = response.json()
            print(fmt_response)

        except Exception as e:
            print(e)
    #
    # return fmt_response


def main():
    create_mailboxes()


if __name__ == "__main__":
    main()
