"""This script initializes the admin database."""
import logging

from sqlalchemy.exc import IntegrityError

from app.config import settings
from app.db import AdminSession, DBProjectServer

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


def initialize_dbadmin() -> None:
    """Initializes the admin database."""
    session = AdminSession()
    for server_name in settings.DBPROJECT_SERVERS:
        logger.info(f'Adding project server: {server_name}')
        uri = f'postgresql://{settings.DBPROJECT_USER}:{settings.DBPROJECT_PASSWORD}@{server_name}'  # noqa
        max_size = 2 ** 50  # 1 PiB
        server = DBProjectServer(uri=uri, max_size=max_size, available_size=max_size)
        try:
            with session.begin():
                session.add(server)
        except IntegrityError:
            # The project server is already in the database
            pass


def main() -> None:
    """Logs and initializes the admin database."""
    logger.info('Creating initial data')
    initialize_dbadmin()
    logger.info('Initial data created')


if __name__ == '__main__':
    main()