// 请求方法
package com.example.myapplication.network

import okhttp3.ResponseBody
import retrofit2.Response
import retrofit2.http.*

interface ApiService {

    // GET 示例：/users/{id}
    // @GET("users/{id}")
    // suspend fun getUser(
    //     @Path("id") id: String
    // ): ApiResponse<User>

    // GET 示例：带查询参数 /users?page=1&pageSize=20
    // @GET("users")
    // suspend fun getUsers(
    //     @Query("page") page: Int,
    //     @Query("pageSize") pageSize: Int
    // ): ApiResponse<List<User>>

    //登录
    @POST("user/login")
    suspend fun login(
        @Body body: LoginRequest
    ): ApiResponse<LoginResponse>

    // =========================================用户=================================
    //获取用户详情
    @GET("user/detail")
    suspend fun getUser(
    ): ApiResponse<User>

    //更新用户信息
    @POST("user/updateInfo")
    suspend fun updateUserInfo(
        @Body body: updateInfoRequest
    ): ApiResponse<User>


    //===========================================首页=================================
    // 标签列表
    @GET("tag/list")
    suspend fun tagList(
    ): ApiResponse<List<Tag>>

    //未登录用户按标签查询人设列表
    @GET("character/listByTagWithNotLogin")
    suspend fun personaListByTag(
        @Query("tagId") tagId: Int
    ): ApiResponse<List<listByTagWithNotLogin>>

    //登录用户按标签查询人设列表
    @GET("character/listByTag")
    suspend fun loggedInPersonaListByTag(
        @Query("tagId") tagId: Int
    ): ApiResponse<List<listByTagWithNotLogin>>

    // 人设列表
    @GET("character/list")
    suspend fun personaByTag(
    ): ApiResponse<List<listByTagWithNotLogin>>

    //未登录用户人设列表
    @GET("character/listWithNotLogin")
    suspend fun personaListWithNotLogin(
    ): ApiResponse<List<listByTagWithNotLogin>>

    // 人设详情
    @GET("character/detail")
    suspend fun characterDetail(
        @Query("id") id: Int
    ): ApiResponse<CharacterDetailResponse>

    //删除用户人设
    @GET("character/delUserCharacter")
    suspend fun delUserCharacter(
        @Query("id") id: Int
    ): ApiResponse<Unit>

    //添加用户人设
    @POST("character/addUserCharacter")
    suspend fun addUserCharacter(
        @Body body: AddPersonaClick
    ): ApiResponse<Unit>

    //==========================================商城===========================================

    //查询钱包余额
    @GET("wallet/balance")
    suspend fun walletBalance(
    ): ApiResponse<Wallet>
    
    //查询所有主题风格
    @GET("themes/listAllStyles")
    suspend fun themeList(
    ): ApiResponse<List<Theme>>

    //按风格查询主题
    @GET("themes/listByStyle")
    suspend fun themeListByStyle(
        @Query("themeStyle") id: Int
    ): ApiResponse<List<themeStyle>>

    //查询主题详情
    @GET("themes/detail")
    suspend fun themeDetail(
        @Query("themeId") id: Int
    ): ApiResponse<themeDetail>

    //推荐主题列表
    @GET("themes/recommended")
    suspend fun recommendThemeList(
    ): ApiResponse<List<themeStyle>>

    //搜索主题
    @GET("themes/search")
    suspend fun searchTheme(
        @Query("themeName") keyword: String
    ): ApiResponse<List<themeStyle>>

    //查询已购买的主题
    @GET("themes/purchased")
    suspend fun purchasedThemeList(
    ): ApiResponse<List<themeStyle>>

    // 批量删除用户主题
    @POST("user-themes/batch-delete")
    suspend fun batchDeleteUserTheme(
        @Body body: deleteThemeRequest
    ): ApiResponse<Boolean>

    // 购买主题
    @POST("themes/purchase")
    suspend fun purchaseTheme(
        @Body body: purchaseThemeRequest
    ): ApiResponse<Unit>

    //恢复已删除的主题
    @POST("themes/restore")
    suspend fun restoreTheme(
        @Query("themeId") themeId: Int
    ): ApiResponse<Unit>
    // =========================================文件=============================================
    // zip 文件下载（或其它大文件）——必须 @Streaming
    @Streaming
    @GET("files/{fileName}")
    suspend fun downloadZip(
        @Path("fileName") fileName: String   // 比如 "xxx.zip"
    ): Response<ResponseBody>

    // 完整 URL 下载
    @Streaming
    @GET
    @Headers(
    "Accept-Encoding: identity"
    )
    suspend fun downloadZipFromUrl(
        @Url url: String   // 完整的下载 URL
    ): Response<ResponseBody>
}
