package alipay

import (
	"context"
	"time"

	"github.com/smartwalle/alipay/v3"

	"github.com/break/junhong_cmp_fiber/internal/model"
	apperrors "github.com/break/junhong_cmp_fiber/pkg/errors"
)

// BuildWapPayURL 生成支付宝手机网站支付 URL。
// payment.PaymentNo 作为 out_trade_no，payment.Amount（分）转为元字符串，
// payment.ExpireAt 若非空则转换为支付宝 TimeExpire 格式（yyyy-MM-dd HH:mm）。
// 返回签名后的完整 WAP 支付 URL，qr_link 与 copy_link 可使用同一个 URL。
func BuildWapPayURL(ctx context.Context, cfg *model.WechatConfig, payment *model.Payment, subject string) (string, error) {
	client, err := NewClientFromConfig(cfg)
	if err != nil {
		return "", err
	}

	totalAmount := FenToYuan(payment.Amount)

	param := alipay.TradeWapPay{
		Trade: alipay.Trade{
			NotifyURL:   cfg.AliNotifyURL,
			ReturnURL:   cfg.AliReturnURL,
			Subject:     subject,
			OutTradeNo:  payment.PaymentNo,
			TotalAmount: totalAmount,
			ProductCode: "QUICK_WAP_WAY",
		},
	}

	// 设置支付链接过期时间
	if payment.ExpireAt != nil && payment.ExpireAt.After(time.Now()) {
		param.TimeExpire = payment.ExpireAt.Format("2006-01-02 15:04")
	}

	payURL, err := client.TradeWapPay(param)
	if err != nil {
		return "", apperrors.Wrap(apperrors.CodeNoPaymentConfig, err, "支付宝配置不可用：生成支付链接失败")
	}

	return payURL.String(), nil
}
