#!/usr/bin/env python
import os
import shutil

env = os.environ.get

smtp_settings = [
    ('username', ''),
    ('password', ''),
    ('host', 'localhost'),
    ('port', '25'),
    ('security', 'none'),
    ('to', ''),
    ('from', ''),
]

required = ['to', 'from']

settings = env('ISSO_SETTINGS')
if not settings:
    raise Exception('No ISSO_SETTINGS defined')

settings = settings.split(';')


def backup_name(setting):
    return setting + '.bak'


def purge_backup(setting):
    # if there is a backup file, delete it
    backup_setting = backup_name(setting)
    if os.path.exists(backup_setting):
        try:
            os.remove(backup_setting)
        except OSError:
            pass


def create_backup(setting):
    # make a backup
    shutil.copyfile(setting, backup_name(setting))


def load_values():
    values = []
    for name, default in smtp_settings:
        label = 'ISSO_SMTP_%s' % name.upper()
        value = env(label, default)
        if name in required and not value.strip():
            raise Exception('Required environment variable is not set: %s' %
                            label)
        values.append([label, value])
    return values


def replace_placeholders(setting, values):
    with open(setting, 'r') as _file:
        content = _file.read()

    for label, value in values:
        content = content.replace(label, value)

    # make a backup
    create_backup(setting)

    with open(setting, 'w') as _file:
        _file.write(content)

    return content


def main():
    values = load_values()

    for setting in settings:
        print("Replacing settings %s" % setting)
        replace_placeholders(setting, values)


if __name__ == '__main__':
    main()