import { Injectable } from '@nestjs/common';
import { CreateVideoDto } from './dto/create.video.dto';
import { VideoProviderFactory } from './providers/video-provider.factory';
import { VideoProviderType, PromptAI, ServiceType } from 'src/common/enums';
import { PromptService } from '../prompts/prompt.service';

@Injectable()
export class VideosService {
  constructor(
    private readonly providerFactory: VideoProviderFactory,
    private readonly promptService: PromptService,
  ) {}

  async createVideo(
    providerType: VideoProviderType,
    promptAI: PromptAI,
    dto: CreateVideoDto,
  ) {
    dto.prompt = await this.promptService.preparePrompt(
      ServiceType.TEXT_TO_VIDEO,
      promptAI,
      dto.prompt,
    );

    const provider = this.providerFactory.get(providerType);

    return provider.createVideo(dto);
  }

  async getTask(
    providerType: VideoProviderType,
    taskId: string,
    externalTaskId?: string,
  ) {
    const provider = this.providerFactory.get(providerType);
    return provider.getTask(taskId, externalTaskId);
  }

  async listTasks(providerType: VideoProviderType, page = 1, size = 30) {
    const provider = this.providerFactory.get(providerType);
    return provider.listTasks(page, size);
  }
}
