package api

import (
	"ZhenTuLocalPassiveAdapter/dto"
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"
)

func UploadTaskFile(task dto.Task, file dto.FileObject) error {
	url, err := QueryUploadUrlForTask(task.TaskID)
	if err != nil {
		return err
	}
	if err := OssUpload(url, file.URL); err != nil {
		return err
	}
	return nil
}

func OssUpload(url, filePath string) error {
	// 使用 http put 请求上传文件
	file, err := os.Open(filePath)
	defer os.Remove(filePath)
	defer file.Close()
	if err != nil {
		return err
	}
	fileBytes, err := io.ReadAll(file)
	if err != nil {
		return err
	}

	req, err := http.NewRequest("PUT", url, bytes.NewBuffer(fileBytes))
	if err != nil {
		return err
	}
	req.Header.Set("Content-Type", "video/mp4")
	req.Header.Set("Content-Length", fmt.Sprintf("%d", len(fileBytes)))
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		return err
	}
	defer resp.Body.Close()
	if resp.StatusCode != http.StatusOK {
		return fmt.Errorf("upload failed with status code %d", resp.StatusCode)
	}
	return nil
}