defaults = {
    'apt': {
        'packages': {
            # for paperless itself
            'fonts-liberation': {},
            'gnupg': {},
            'imagemagick': {},
            'libmagic-dev': {},
            'default-libmysqlclient-dev': {},
            'libpq-dev': {},
            'mariadb-client': {},
            'mime-support': {},
            'optipng': {},
            'poppler-utils': {},
            'python3-wheel': {},

            # for OCRmyPDF
            'ghostscript': {},
            'icc-profiles-free': {},
            'liblept5': {},
            'libxml2': {},
            'pngquant': {},
            'qpdf': {},
            'tesseract-ocr': {},
            'tesseract-ocr-deu': {},
            'tesseract-ocr-eng': {},
            'unpaper': {},
            'zlib1g': {},
        },
    },
    'backups': {
        'paths': {
            '/mnt/paperless',
        },
    },
    'postgresql': {
        'roles': {
            'paperless': {
                'password': repo.vault.password_for(f'{node.name} postgresql paperless'),
            },
        },
        'databases': {
            'paperless': {
                'owner': 'paperless',
            },
        },
    },
}

@metadata_reactor.provides(
    'apt/packages',
)
def paperless_tesseract_languages(metadata):
    packages = {}

    for lang in metadata.get('paperless/ocr_languages', {'deu', 'eng'}):
        packages[f'tesseract-ocr-{lang}'] = {}

    return {
        'apt': {
            'packages': packages,
        },
    }


@metadata_reactor.provides(
    'icinga2_api/paperless/services',
)
def icinga_check_for_new_release(metadata):
    return {
        'icinga2_api': {
            'paperless': {
                'services': {
                    'PAPERLESS UPDATE': {
                        'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_github_for_new_release paperless-ngx/paperless-ngx {}'.format(metadata.get('paperless/version')),
                        'vars.notification.mail': True,
                        'check_interval': '60m',
                    },
                },
            },
        },
    }


@metadata_reactor.provides(
    'nginx/vhosts/paperless',
)
def nginx(metadata):
    if not node.has_bundle('nginx'):
        raise DoNotRunAgain

    return {
        'nginx': {
            'vhosts': {
                'paperless': {
                    'domain': metadata.get('paperless/domain'),
                    'locations': {
                        '/': {
                            'target': 'http://127.0.0.1:22070',
                            'websockets': True,
                            'proxy_set_header': {
                                'X-Forwarded-Host': '$server_name',
                            },
                        },
                        '/static/': {
                            'alias': '/opt/paperless/src/paperless-ngx/static/',
                        },
                    },
                    'max_body_size': '100M',
                    'website_check_path': '/accounts/login/',
                    'website_check_string': 'Paperless-ngx',
                },
            },
        },
    }
