import { Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { ModuleEntity } from './entities/module.entity';
import { CreateModuleDto } from './dto/create-module.dto';
import { UpdateModuleDto } from './dto/update-module.dto';

@Injectable()
export class ModulesService {
  constructor(
    @InjectRepository(ModuleEntity, 'scheme_dbs')  
    private readonly moduleRepo: Repository<ModuleEntity>, 
  ) {}

  async create(dto: CreateModuleDto) {
    const module = this.moduleRepo.create(dto);    
    return this.moduleRepo.save(module);
  }

  async findAll(): Promise<ModuleEntity[]> {
    return this.moduleRepo.find({ order: { name: 'ASC' } });
  }

  async findOne(id: number): Promise<ModuleEntity> {
    const module = await this.moduleRepo.findOne({ where: { id } });
    if (!module) throw new NotFoundException('Module not found');
    return module;
  }

  async findBySlug(slug: string): Promise<ModuleEntity> {
    const module = await this.moduleRepo.findOne({ where: { slug } });
    if (!module) throw new NotFoundException('Module not found');
    return module;
  }

  async update(id: number, dto: UpdateModuleDto): Promise<ModuleEntity> {
    const module = await this.findOne(id);
    Object.assign(module, dto);
    return this.moduleRepo.save(module);
  }

  async remove(id: number): Promise<ModuleEntity> {
    const module = await this.findOne(id);
    return this.moduleRepo.remove(module);
  }
}
