package com.zioinfo.kintex.module.m5;

import com.zioinfo.kintex.module.m5.dto.ReRoomJobRequest;
import com.zioinfo.kintex.module.m5.dto.RenderJobDto;
import com.zioinfo.kintex.module.m5.dto.RenderJobRequest;
import com.zioinfo.kintex.module.m5.dto.WorkerCallbackRequest;

import java.util.List;

/** M5 RenderJob 발행/상태 서비스 계약. */
public interface RenderJobService {

    /** RenderJob 발행 — 쿼터 확인 후 Redis 큐에 적재. 상태 QUEUED로 반환. */
    RenderJobDto publish(String eventId, String boothId, RenderJobRequest request);

    /**
     * ReRoomAI 방식 사진 시안(image-to-image) 발행 — 소유자 지시 13.2.
     * 발행/쿼터/상태/콜백/푸시 경로는 {@link #publish}와 동일하게 재사용하되,
     * 워커에 참조 이미지 로컬경로·스타일·자연어 지시·mode=reroom 을 함께 적재한다.
     */
    RenderJobDto publishReRoom(String eventId, String boothId, ReRoomJobRequest request);

    /** 잡 상태 조회. */
    RenderJobDto getStatus(String eventId, String jobId);

    /** 부스 단위 잡 목록(SCR-12 갤러리) — 내구 저장(DB) 기반. */
    List<RenderJobDto> listByBooth(String boothId, String shotPreset);

    /** 부스 완료(DONE) 렌더 이력(SCR-06 이력 갤러리) — 내구 저장(DB) 기반, 최신순. */
    List<RenderJobDto> listHistoryByBooth(String boothId);

    /** 워커 완료/실패 콜백 처리 — 상태 갱신 + WebSocket 푸시(+ 성공 시 쿼터 차감). */
    RenderJobDto handleWorkerCallback(WorkerCallbackRequest callback);
}
