"""
Migration 0024 -- crawlerChannel
"""

from btrixcloud.migrations import BaseMigration


MIGRATION_VERSION = "0024"


class Migration(BaseMigration):
    """Migration class."""

    # pylint: disable=unused-argument
    def __init__(self, mdb, **kwargs):
        super().__init__(mdb, migration_version=MIGRATION_VERSION)

    async def migrate_up(self):
        """Perform migration up.

        Add crawlerChannel to existing workflows and profiles, and update configmaps
        """
        # pylint: disable=duplicate-code
        mdb_crawl_configs = self.mdb["crawl_configs"]
        mdb_profiles = self.mdb["profiles"]

        async for config in mdb_crawl_configs.find(
            {"crawlerChannel": {"$in": ["", None]}}
        ):
            config_id = config["_id"]
            try:
                await mdb_crawl_configs.find_one_and_update(
                    {"_id": config_id},
                    {"$set": {"crawlerChannel": "default"}},
                )
            # pylint: disable=broad-except
            except Exception as err:
                print(
                    f"Error adding crawlerChannel 'default' to workflow {config_id}: {err}",
                    flush=True,
                )

        async for profile in mdb_profiles.find({"crawlerChannel": {"$in": ["", None]}}):
            profile_id = profile["_id"]
            try:
                await mdb_profiles.find_one_and_update(
                    {"_id": profile_id},
                    {"$set": {"crawlerChannel": "default"}},
                )
            # pylint: disable=broad-except
            except Exception as err:
                print(
                    f"Error adding crawlerChannel 'default' to profile {profile_id}: {err}",
                    flush=True,
                )
