package agent

import (
	"context"
	"fmt"
	"net/http"
	"net/url"
	"qnc-server/app/main/model"
	"qnc-server/common/xerr"

	"github.com/pkg/errors"
	"github.com/zeromicro/go-zero/core/logx"

	"qnc-server/app/main/api/internal/svc"
)

type PromotionRedirectLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewPromotionRedirectLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PromotionRedirectLogic {
	return &PromotionRedirectLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

// PromotionRedirect 推广链接重定向
// 从推广域名重定向到正式域名的推广页面
func (l *PromotionRedirectLogic) PromotionRedirect(r *http.Request, w http.ResponseWriter) error {
	// 1. 获取link参数
	linkIdentifier := r.URL.Query().Get("link")
	if linkIdentifier == "" {
		return errors.Wrapf(xerr.NewErrCode(xerr.REUQEST_PARAM_ERROR), "缺少link参数")
	}

	// 2. 验证linkIdentifier是否存在（可选，用于确保链接有效）
	_, err := l.svcCtx.AgentLinkModel.FindOneByLinkIdentifier(l.ctx, linkIdentifier)
	if err != nil {
		if errors.Is(err, model.ErrNotFound) {
			return errors.Wrapf(xerr.NewErrCode(xerr.REUQEST_PARAM_ERROR), "推广链接不存在或已失效")
		}
		l.Errorf("查询推广链接失败: %v", err)
		// 即使查询失败，也继续重定向，避免影响用户体验
	}

	// 3. 构建重定向URL（使用相对路径，由服务器配置处理域名）
	redirectURL := fmt.Sprintf("/agent/promotionInquire/%s", url.QueryEscape(linkIdentifier))

	// 5. 执行重定向（302临时重定向）
	l.Infof("推广链接重定向: linkIdentifier=%s, redirectURL=%s", linkIdentifier, redirectURL)
	http.Redirect(w, r, redirectURL, http.StatusFound)

	return nil
}
