import { Injectable } from '@nestjs/common';
import { ITenantFinder } from './tenant-context.middleware.js';
import { TenantContext, TenantStatus, TenantPlan, DEFAULT_TENANT_ID } from './tenant.types.js';

/**
 * 简单租户查找器
 * 用于内部服务（由网关验证租户后调用）
 * 生产环境应使用 HTTP 客户端调用 evolution-service 验证
 */
@Injectable()
export class SimpleTenantFinder implements ITenantFinder {
  // 租户缓存 (简单实现，生产环境应使用 Redis)
  private cache = new Map<string, { tenant: TenantContext; expiresAt: number }>();
  private readonly cacheTtlMs = 5 * 60 * 1000; // 5 分钟缓存

  async findById(id: string): Promise<TenantContext | null> {
    // 检查缓存
    const cached = this.cache.get(id);
    if (cached && cached.expiresAt > Date.now()) {
      return cached.tenant;
    }

    // 默认租户 (向后兼容)
    if (id === DEFAULT_TENANT_ID) {
      const tenant: TenantContext = {
        id: DEFAULT_TENANT_ID,
        slug: 'default',
        name: 'Default Tenant',
        status: TenantStatus.ACTIVE,
        plan: TenantPlan.ENTERPRISE,
        config: {},
      };
      this.cache.set(id, { tenant, expiresAt: Date.now() + this.cacheTtlMs });
      return tenant;
    }

    // 对于其他租户，信任传入的 ID（由网关验证）
    // 生产环境应调用 evolution-service 验证
    const tenant: TenantContext = {
      id,
      slug: id.substring(0, 8),
      name: `Tenant ${id.substring(0, 8)}`,
      status: TenantStatus.ACTIVE,
      plan: TenantPlan.STANDARD,
      config: {},
    };
    this.cache.set(id, { tenant, expiresAt: Date.now() + this.cacheTtlMs });
    return tenant;
  }

  /**
   * 清除缓存
   */
  clearCache(): void {
    this.cache.clear();
  }

  /**
   * 从缓存中移除指定租户
   */
  invalidate(tenantId: string): void {
    this.cache.delete(tenantId);
  }
}
