package utm

import (
	"strings"

	"apps/backend/internal/config"
	"apps/backend/internal/module/growth/domain"
	"apps/backend/internal/types"
)

const trackPathPrefix = "/api/v1/public/u/"

// publicView 把追蹤連結轉成對外型別。TrackUrl 必須由後端算：連結會被貼進 Threads
// 貼文，前端自己拼 window.location.origin 在 API 與前端不同 host 時會產出 404 連結。
func publicView(c config.Config, u *domain.UtmLink) types.UtmLinkPublic {
	path := trackPathPrefix + u.Code
	return types.UtmLinkPublic{
		Id:             u.ID,
		Code:           u.Code,
		TrackPath:      path,
		TrackUrl:       publicAPIBase(c) + path,
		DestinationUrl: u.DestinationURL,
		OutcomeId:      u.OutcomeID,
		Label:          u.Label,
		Clicks:         u.Clicks,
		CreatedAt:      u.CreatedAt,
	}
}

// publicAPIBase 與 threads oauth callback 用同一套推導：PublicAPIBase 優先，否則
// PublicWebBase（正式站 nginx、dev 的 vite 都會把 /api 轉到 gateway）。兩者皆空
// 時回空字串，TrackUrl 退回相對路徑讓瀏覽器自己解。
func publicAPIBase(c config.Config) string {
	if b := strings.TrimRight(strings.TrimSpace(c.PublicAPIBase), "/"); b != "" {
		return b
	}
	return strings.TrimRight(strings.TrimSpace(c.PublicWebBase), "/")
}
