package com.jishisongfu.duobibi.data.api

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import retrofit2.http.Body
import retrofit2.http.POST

/**
 * 价保哨兵价格查询 API。
 *
 * 后端 `POST /api/v1/track-price` 是 LLM mock 实现(没真实平台价 API),
 * 给商品标题 + 平台 + 购买价 → 返回 LLM 估的当前价 + 哈希抖动得到的趋势/差价。
 *
 * 调用频率:WorkManager 每天 1 次后台批量调,N 条监控就调 N 次。
 *
 * 复用 OCR 那套 [`@Named("ocr")` Retrofit](../../di/NetworkModule.kt) — LLM 调用
 * 也可能 5-10s,业务默认 readTimeout=10s 容易超时。
 */
interface ProtectApi {

    @POST("api/v1/track-price")
    suspend fun trackPrice(@Body req: TrackPriceRequest): TrackPriceResponse
}

@Serializable
data class TrackPriceRequest(
    val platform: String,
    @SerialName("product_title") val productTitle: String,
    @SerialName("purchase_price") val purchasePrice: Double,
    /** 秒级 epoch,后端转"距今 N 天"给 LLM。客户端 Room 存的是 ms,在 Repository 层 /1000 */
    @SerialName("purchase_at") val purchaseAt: Long,
)

@Serializable
data class TrackPriceResponse(
    /** 抖动后的最终输出 — 客户端按这个判断价保 */
    @SerialName("current_price") val currentPrice: Double,
    /** LLM 估的"日常常见价",抖动前的锚 — 客户端可显示给用户(可选)*/
    @SerialName("base_price") val basePrice: Double,
    /** "down" / "flat" / "up" */
    val trend: String,
    /** purchasePrice - currentPrice;> 0 = 可申请价保 */
    val savings: Double,
    /** 服务端响应生成时间(秒级 epoch)*/
    @SerialName("checked_at") val checkedAt: Long,
)
