import { UserRepository } from '../models/repositories/UserRepository';
import { EventTypeRepository } from '../models/repositories/EventTypeRepository';
import { AppError } from '../utils/AppError';
import { User } from '../models/entities/User.entity';
import { EventType } from '../models/entities/EventType.entity';

export class PublicService {
  constructor(
    private userRepo = new UserRepository(),
    private eventTypeRepo = new EventTypeRepository(),
  ) {}

  async getHostPage(username: string): Promise<{ user: User; eventTypes: EventType[] }> {
    const user = await this.userRepo.findByUsername(username);
    if (!user) throw new AppError('not_found', 404, 'Host not found.');

    const eventTypes = await this.eventTypeRepo.findByUserId(user.id, true);
    return { user, eventTypes };
  }

  async getEventPage(username: string, eventSlug: string): Promise<{ user: User; eventType: EventType }> {
    const user = await this.userRepo.findByUsername(username);
    if (!user) throw new AppError('not_found', 404, 'Host not found.');

    const eventType = await this.eventTypeRepo.findByUserAndSlug(user.id, eventSlug);
    if (!eventType) throw new AppError('not_found', 404, 'Event type not found.');

    return { user, eventType };
  }
}
