"""
Route `apps.cluster` models to the `cluster` database alias; everything else uses `default` (master).
"""


class MasterClusterRouter:
    _cluster_app = "cluster"

    def db_for_read(self, model, **hints):
        if model._meta.app_label == self._cluster_app:
            return "cluster"
        return None

    def db_for_write(self, model, **hints):
        if model._meta.app_label == self._cluster_app:
            return "cluster"
        return None

    def allow_relation(self, obj1, obj2, **hints):
        labels = {obj1._meta.app_label, obj2._meta.app_label}
        if self._cluster_app in labels:
            return True
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        if app_label == self._cluster_app:
            return db == "cluster"
        if db == "cluster":
            return False
        return db == "default"
