syntax = "v1"

// 圖片上傳請求（使用 base64）
type UploadImgReq {
    Authorization
    Content    string  `json:"content" validate:"required"` // base64 編碼的圖片內容
}

// 影片上傳請求（使用 multipart/form-data 文件上傳）
// 注意：文件字段需要在 handler 中通過 r.FormFile("file") 獲取
type UploadVideoReq {
    Authorization
}

// 統一的上傳響應
type UploadResp {
    FileUrl    string  `json:"file_url"`  // 文件訪問 URL
    FileSize   int64   `json:"file_size,optional"`  // 文件大小（bytes）
    MimeType   string  `json:"mime_type,optional"`  // MIME 類型
}

@server(
    group:  fileStorage
    prefix: /api/v1/fileStorage
    schemes: https
    timeout: 300s  // 影片上傳可能需要更長時間
    middleware: AuthMiddleware
)

service gateway {
    /*	@respdoc-400 (BaseResponse) // 輸入的參數錯誤 */
    /*	@respdoc-403 (BaseResponse) // 無效的Token */
    /*  @respdoc-413 (BaseResponse) // 文件大小超過限制 */
    /*  @respdoc-500 (BaseResponse) // 伺服器出錯 */
    @doc(
        summary: "create - 上傳圖片檔案"
        description: "上傳轉成 base64 過後的圖片，建議圖片大小不超過 10MB"
    )
    @handler UploadImgHandler
    post /fileStorage/img/upload (UploadImgReq) returns (UploadResp)

    /*	@respdoc-400 (BaseResponse) // 輸入的參數錯誤 */
    /*	@respdoc-403 (BaseResponse) // 無效的Token */
    /*  @respdoc-413 (BaseResponse) // 文件大小超過限制 */
    /*  @respdoc-500 (BaseResponse) // 伺服器出錯 */
    @doc(
        summary: "create - 上傳影片檔案"
        description: "使用 multipart/form-data 上傳影片檔案，form field 名稱為 'file'，注意：大檔案（>50MB）建議使用分片上傳機制"
    )
    @handler UploadVideoHandler
    post /fileStorage/video/upload (UploadVideoReq) returns (UploadResp)
}