import { ConflictException, Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Role } from './entities/role.entity';
import { CreateRoleDto } from './dto/create-role.dto';
import { UpdateRoleDto } from './dto/update-role.dto';

@Injectable()
export class RolesService {
  constructor(
    @InjectRepository(Role)
    private readonly rolesRepository: Repository<Role>,
  ) {}

  findAll() {
    return this.rolesRepository.find({ order: { createdAt: 'DESC' } });
  }

  async findOne(id: string) {
    const role = await this.rolesRepository.findOne({ where: { id } });
    if (!role) throw new NotFoundException('Role not found');
    return role;
  }

  async create(dto: CreateRoleDto) {
    const exists = await this.rolesRepository.findOne({
      where: { code: dto.code, tenantId: dto.tenantId },
    });
    if (exists) throw new ConflictException('Role code already exists');
    const role = this.rolesRepository.create(dto);
    return this.rolesRepository.save(role);
  }

  async update(id: string, dto: UpdateRoleDto) {
    const role = await this.findOne(id);
    Object.assign(role, dto);
    return this.rolesRepository.save(role);
  }

  async remove(id: string) {
    const role = await this.findOne(id);
    await this.rolesRepository.remove(role);
    return { success: true };
  }
}
