import { ConflictException, Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Permission } from './entities/permission.entity';
import { CreatePermissionDto } from './dto/create-permission.dto';
import { UpdatePermissionDto } from './dto/update-permission.dto';

@Injectable()
export class PermissionsService {
  constructor(
    @InjectRepository(Permission)
    private readonly permissionsRepository: Repository<Permission>,
  ) {}

  findAll() {
    return this.permissionsRepository.find({ order: { module: 'ASC' } });
  }

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

  async create(dto: CreatePermissionDto) {
    const exists = await this.permissionsRepository.findOne({ where: { code: dto.code } });
    if (exists) throw new ConflictException('Permission code already exists');
    const permission = this.permissionsRepository.create(dto);
    return this.permissionsRepository.save(permission);
  }

  async update(id: string, dto: UpdatePermissionDto) {
    const permission = await this.findOne(id);
    Object.assign(permission, dto);
    return this.permissionsRepository.save(permission);
  }

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