package myPlant

import (
	"context"
	"time"

	filePb "sundynix-micro-go/app/file/rpc/file"
	"sundynix-micro-go/app/plant/api/internal/svc"
)

// ========== 图片 DTO ==========

// ImageInfo 图片信息 DTO，匹配旧单体 Oss 结构
type ImageInfo struct {
	ID           string `json:"id"`
	Name         string `json:"name"`
	Url          string `json:"url"`
	Tag          string `json:"tag"`
	Key          string `json:"key"`
	Suffix       string `json:"suffix"`
	MD5          string `json:"md5"`
	CreatedAt    string `json:"createdAt"`
	UpdatedAt    string `json:"updatedAt"`
	CreatedAtStr string `json:"createdAtStr"`
}

// ========== 时间格式化 ==========

func FormatTime(t time.Time) string {
	if t.IsZero() {
		return ""
	}
	return t.Format(time.RFC3339)
}

func FormatTimeShort(t time.Time) string {
	if t.IsZero() {
		return ""
	}
	return t.Format("2006-01-02 15:04:05")
}

func UnixToTimeStr(ts int64) string {
	if ts == 0 {
		return ""
	}
	return time.Unix(ts, 0).Format(time.RFC3339)
}

func UnixToTimeStrShort(ts int64) string {
	if ts == 0 {
		return ""
	}
	return time.Unix(ts, 0).Format("2006-01-02 15:04:05")
}

// ========== 文件服务 RPC 封装 ==========

// FetchFilesByIds 通过 FileRpc 批量获取文件信息，返回 id->ImageInfo 映射
func FetchFilesByIds(ctx context.Context, svcCtx *svc.ServiceContext, ids []string) map[string]ImageInfo {
	result := make(map[string]ImageInfo)
	if len(ids) == 0 {
		return result
	}
	resp, err := svcCtx.FileRpc.GetFilesByIds(ctx, &filePb.GetFilesByIdsReq{Ids: ids})
	if err != nil || resp == nil {
		return result
	}
	for _, f := range resp.Files {
		result[f.Id] = ImageInfo{
			ID:           f.Id,
			Name:         f.Name,
			Url:          f.Url,
			Tag:          f.Tag,
			Key:          f.Key,
			Suffix:       f.Suffix,
			MD5:          f.Md5,
			CreatedAt:    UnixToTimeStr(f.CreatedAt),
			UpdatedAt:    UnixToTimeStr(f.CreatedAt),
			CreatedAtStr: UnixToTimeStrShort(f.CreatedAt),
		}
	}
	return result
}
