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

defaults = {
    'apt': {
        'packages': {
            'git': {
                'needed_by': {
                    'svc_systemd:gitea',
                }
            },
        },
    },
    'gitea': {
        'conf': {},
    },
    'postgresql': {
        'roles': {
            'gitea': {
                'password': database_password,
            },
        },
        'databases': {
            'gitea': {
                'owner': 'gitea',
            },
        },
    },
    'systemd': {
        'units': {
            'gitea.service': {
                'Unit': {
                    'Description': 'gitea',
                    'After': {'syslog.target', 'network.target'},
                    'Requires': 'postgresql.service',
                },
                'Service': {
                    'RestartSec': '2s',
                    'Type': 'simple',
                    'User': 'git',
                    'Group': 'git',
                    'WorkingDirectory': '/var/lib/gitea/',
                    'ExecStart': '/usr/local/bin/gitea web -c /etc/gitea/app.ini',
                    'Restart': 'always',
                    'Environment': 'USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea',
                },
                'Install': {
                    'WantedBy': {'multi-user.target'},
                },
            },
        },
    },
    'users': {
        'git': {
            'home': '/home/git',
        },
    },
    'zfs': {
        'datasets': {
            'tank/gitea': {
                'mountpoint': '/var/lib/gitea',
            },
        },
    },
}


@metadata_reactor.provides(
    'gitea/conf',
)
def conf(metadata):
    domain = metadata.get('gitea/domain')

    return {
        'gitea': {
            'conf': {
                'server': {
                    'SSH_DOMAIN': domain,
                    'DOMAIN': domain,
                    'ROOT_URL': f'https://{domain}/',
                    'LFS_JWT_SECRET': repo.vault.password_for(f'{node.name} gitea lfs_secret_key', length=43),
                },
                'security': {
                    'INTERNAL_TOKEN': repo.vault.password_for(f'{node.name} gitea internal_token'),
                    'SECRET_KEY': repo.vault.password_for(f'{node.name} gitea security_secret_key'),
                },
                'database': {
                    'DB_TYPE': 'postgres',
                    'HOST': 'localhost:5432',
                    'NAME': 'gitea',
                    'USER': 'gitea',
                    'PASSWD': database_password,
                    'SSL_MODE': 'disable',
                    'LOG_SQL': 'false',
                },
                'service': {
                    'NO_REPLY_ADDRESS': f'noreply.{domain}',
                },
                'oauth2': {
                    'JWT_SECRET': repo.vault.password_for(f'{node.name} gitea oauth_secret_key', length=43),
                },
            },
        },
    }


@metadata_reactor.provides(
    'nginx/vhosts',
)
def nginx(metadata):
    return {
        'nginx': {
            'vhosts': {
                metadata.get('gitea/domain'): {
                    'content': 'nginx/proxy_pass.conf',
                    'context': {
                        'target': 'http://127.0.0.1:3500',
                    }
                },
            },
        },
    }