import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { ClsService } from 'nestjs-cls';
import { TenantAwareRepository } from '../../../common/repositories/tenant-aware.repository';
import { RoleEntity } from '../../../entities/role.entity';

/**
 * RoleRepository — tenant-scoped role queries via CLS.
 * Per CLAUDE.md: All repos extend TenantAwareRepository (auto tenant scoping via CLS)
 */
@Injectable()
export class RoleRepository extends TenantAwareRepository<RoleEntity> {
  constructor(@InjectRepository(RoleEntity) repo: Repository<RoleEntity>, cls: ClsService) {
    super(repo, cls);
  }

  async findAllWithPermissions(): Promise<RoleEntity[]> {
    return this.find({
      relations: {
        permissions: true,
      },
      order: { created_at: 'ASC' },
    });
  }

  async findByIdWithPermissions(id: string): Promise<RoleEntity | null> {
    return this.findOne({
      where: { id },
      relations: {
        permissions: true,
      },
    });
  }

  async findByName(name: string): Promise<RoleEntity | null> {
    return this.findOne({
      where: { name },
    });
  }
}
