@!@
import os.path
import re
from univention.config_registry.handler import run_filter


def get_registered_files():
    files = []
    registered_directory = '/etc/univention/templates/info/'
    for f in os.listdir(registered_directory):
        for line in open(os.path.join(registered_directory, f)).readlines():
            if line.startswith('File: '):
                fn = line.replace('File: ', '').strip()
                if fn.startswith('etc/ldap/slapd.conf.d'):
                    files.append(fn)
            elif line.startswith('Subfile: '):
                fn = line.replace('Subfile: ', '').strip()
                if fn.startswith('etc/ldap/slapd.conf.d'):
                    files.append(fn)

    return files


def ucr_filter_files(registered_files):
    directory_path = '/etc/univention/templates/files/etc/ldap/slapd.conf.d/'
    checklist = []
    for f in os.listdir(directory_path):
        if f in {'25univention-ldap-server_local-schema', '31modules'} or f.startswith('.'):
            continue

        # check if file is registered?
        if 'etc/ldap/slapd.conf.d/%s' % (f,) not in registered_files:
            continue

        checklist.append(f)

    output = "\n"
    if checklist:
        for fn in checklist:
            with open('/etc/univention/templates/files/etc/ldap/slapd.conf.d/%s' % (fn,)) as f:
                output += run_filter(f.read(), configRegistry).decode('UTF-8')
    return output


def is_schema_file_included(schema_file, ucr_filtered_output):
    return re.search(r'\ninclude.*%s\n' % (schema_file,), ucr_filtered_output) is not None


if configRegistry.get('ldap/server/type', 'slave') == 'master' and os.path.exists('/var/lib/univention-ldap/local-schema'):
    registered_files = get_registered_files()
    ucr_filtered_output = ucr_filter_files(registered_files)

    for schema_file in sorted(os.listdir('/var/lib/univention-ldap/local-schema')):
        if not is_schema_file_included(schema_file, ucr_filtered_output):
            print('include         /var/lib/univention-ldap/local-schema/%s' % (schema_file,))
@!@
