database_password = repo.vault.password_for(f'{node.name} postgresql n8n')

defaults = {
    'backups': {
        'paths': {
            '/opt/n8n',
        },
    },
    'npm': {
        'n8n': {},
    },
    'n8n': {
        'DB_TYPE': 'postgresdb',
        'DB_POSTGRESDB_DATABASE': 'n8n',
        'DB_POSTGRESDB_HOST': 'localhost',
        'DB_POSTGRESDB_PORT': 5432,
        'DB_POSTGRESDB_USER': 'n8n',
        'DB_POSTGRESDB_PASSWORD': database_password,
    },
    'postgresql': {
        'databases': {
            'n8n': {
                'when_creating': {
                    'encoding': 'UTF8',
                    'collation': 'C.UTF-8',
                    'ctype': 'C.UTF-8',
                },
                'owner': 'n8n',
            },
        },
        'roles': {
            'n8n': {
                'password': database_password,
            },
        },
    },
    'systemd': {
        'units': {
            'n8n.service': {
                'Unit': {
                    'Description': 'n8n',
                    'Requires': 'network.target postgresql.service',
                    'After': 'postgresql.service',
                },
                'Service': {
                    'Restart': 'always',
                    'RestartSec': '5',
                    'WorkingDirectory': '/opt/n8n',
                    'ExecStart': '/usr/bin/npx n8n start',
                    'User': 'n8n',
                    'Group': 'n8n',
                    'Environment': {
                        'NODE_ENV=production',
                    },
                },
            },
        },
    },
    'users': {
        'n8n': {
            'home': '/opt/n8n',
        },
    },
    'zfs': {
        'datasets': {
            'tank/n8n': {
                'mountpoint': '/opt/n8n',
                'needed_by': {'directory:/opt/n8n'},
            },
        },
    },
}


@metadata_reactor.provides(
    'systemd/services/n8n.service',
)
def systemd(metadata):
    return {
        'systemd': {
            'units': {
                'n8n.service': {
                    'Service': {
                        'Environment': metadata.get('n8n'),
                    },
                },
            },
        },
    }