import { ConflictException, Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Group } from './entities/group.entity';
import { GroupMessage } from './entities/group-message.entity';
import { CreateGroupDto } from './dto/create-group.dto';
import { SendGroupMessageDto } from './dto/send-group-message.dto';

@Injectable()
export class GroupsService {
  constructor(
    @InjectRepository(Group)
    private readonly groupsRepository: Repository<Group>,
    @InjectRepository(GroupMessage)
    private readonly groupMessagesRepository: Repository<GroupMessage>,
  ) {}

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

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

  async create(dto: CreateGroupDto) {
    const exists = await this.groupsRepository.findOne({ where: { slug: dto.slug } });
    if (exists) throw new ConflictException('Group slug already exists');
    const group = this.groupsRepository.create(dto);
    return this.groupsRepository.save(group);
  }

  async sendMessage(dto: SendGroupMessageDto) {
    await this.findOne(dto.groupId);
    const message = this.groupMessagesRepository.create({
      ...dto,
      messageType: dto.messageType || 'text',
    });
    return this.groupMessagesRepository.save(message);
  }

  messages(groupId: string) {
    return this.groupMessagesRepository.find({
      where: { groupId },
      order: { createdAt: 'ASC' },
    });
  }
}
