"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TenantModule = void 0;
const common_1 = require("@nestjs/common");
const typeorm_1 = require("@nestjs/typeorm");
const tenant_service_1 = require("./services/tenant.service");
const tenant_entity_1 = require("./entities/tenant.entity");
const event_emitter_1 = require("@nestjs/event-emitter");
const auth_constants_1 = require("../auth.constants");
const nest_auth_contracts_1 = require("@ackplus/nest-auth-contracts");
const auth_config_service_1 = require("../core/services/auth-config.service");
const disabled_tenant_context_service_1 = require("./tenant-context/services/disabled-tenant-context.service");
const isolated_tenant_context_service_1 = require("./tenant-context/services/isolated-tenant-context.service");
const shared_tenant_context_service_1 = require("./tenant-context/services/shared-tenant-context.service");
let TenantModule = class TenantModule {
};
exports.TenantModule = TenantModule;
exports.TenantModule = TenantModule = __decorate([
    (0, common_1.Module)({
        imports: [
            event_emitter_1.EventEmitterModule,
            typeorm_1.TypeOrmModule.forFeature([tenant_entity_1.NestAuthTenant]),
        ],
        providers: [
            tenant_service_1.TenantService,
            {
                provide: auth_constants_1.NEST_AUTH_TENANT_CONTEXT_SERVICE,
                useFactory: (tenantService, authConfig) => {
                    const opts = authConfig.getConfig().tenant;
                    if (!opts?.enabled) {
                        return new disabled_tenant_context_service_1.DisabledTenantContextService();
                    }
                    const mode = opts.mode ?? nest_auth_contracts_1.TenantModeEnum.ISOLATED;
                    if (mode === nest_auth_contracts_1.TenantModeEnum.SHARED) {
                        return new shared_tenant_context_service_1.SharedTenantContextService(tenantService);
                    }
                    return new isolated_tenant_context_service_1.IsolatedTenantContextService(tenantService);
                },
                inject: [
                    tenant_service_1.TenantService,
                    auth_config_service_1.AuthConfigService,
                ],
            },
        ],
        exports: [
            tenant_service_1.TenantService,
            auth_constants_1.NEST_AUTH_TENANT_CONTEXT_SERVICE,
        ],
    })
], TenantModule);
//# sourceMappingURL=tenant.module.js.map