package com.ycwl.basic.integration.render.client;

import com.ycwl.basic.integration.common.response.CommonResponse;
import com.ycwl.basic.integration.common.response.PageResponse;
import com.ycwl.basic.integration.render.dto.job.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 渲染作业V2客户端
 */
@FeignClient(name = "zt-render-worker", contextId = "render-job-v2", path = "/api/render/v2")
public interface RenderJobV2Client {

    // ==================== 小程序侧接口 ====================

    /**
     * 创建预览作业
     */
    @PostMapping("/preview")
    CommonResponse<CreatePreviewResponse> createPreview(@RequestBody CreatePreviewRequest request);

    /**
     * 获取作业状态
     */
    @GetMapping("/jobs/{jobId}")
    CommonResponse<JobStatusResponse> getJobStatus(@PathVariable("jobId") Long jobId);

    /**
     * 获取HLS播放列表
     * 返回M3U8格式的文本内容
     */
    @GetMapping("/jobs/{jobId}/index.m3u8")
    String getHlsPlaylist(@PathVariable("jobId") Long jobId);

    /**
     * 获取播放列表信息
     */
    @GetMapping("/jobs/{jobId}/playlist-info")
    CommonResponse<PlaylistInfoDTO> getPlaylistInfo(@PathVariable("jobId") Long jobId);

    /**
     * 取消作业
     */
    @PostMapping("/jobs/{jobId}/cancel")
    CommonResponse<Void> cancelJob(@PathVariable("jobId") Long jobId);

    /**
     * 创建FINALIZE_MP4任务
     * 将所有已发布的TS片段合成为MP4文件
     *
     * 前置条件：
     * 1. 作业存在且状态为RUNNING
     * 2. 所有片段都已发布（PublishedCount == SegmentCount）
     * 3. 不存在已有的FINALIZE_MP4任务
     *
     * @param jobId 作业ID
     * @return 任务创建结果
     */
    @PostMapping("/jobs/{jobId}/finalize-mp4")
    CommonResponse<FinalizeMP4Response> createFinalizeMP4Task(@PathVariable("jobId") Long jobId);

    // ==================== 管理端接口 ====================

    /**
     * 获取作业列表
     */
    @GetMapping("/admin/jobs")
    CommonResponse<PageResponse<RenderJobV2DTO>> listJobs(
            @RequestParam(required = false) Long scenicId,
            @RequestParam(required = false) Long templateId,
            @RequestParam(required = false) String status,
            @RequestParam(required = false) String jobType,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "20") Integer pageSize);

    /**
     * 获取作业详情
     */
    @GetMapping("/admin/jobs/{jobId}")
    CommonResponse<RenderJobV2DTO> getJobDetail(@PathVariable("jobId") Long jobId);

    /**
     * 获取作业片段列表
     */
    @GetMapping("/admin/jobs/{jobId}/segments")
    CommonResponse<List<RenderJobSegmentV2DTO>> getJobSegments(@PathVariable("jobId") Long jobId);
}
