package com.zioinfo.mall.gateway;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.Map;

/**
 * Stripe 결제 어댑터 (운영 시 활성, mall.payment.provider=stripe).
 *
 * <p>API 키는 환경변수(STRIPE_SECRET_KEY)에서만 주입. 평문 코드 금지.
 * 키가 없으면 비활성(예외)으로 동작하여 실수로 외부 호출되지 않게 한다.
 * 실제 Stripe SDK 호출은 운영 배포 시 구현 — 스텁은 키 검증만 수행한다.
 */
@Slf4j
@Component
@ConditionalOnProperty(name = "mall.payment.provider", havingValue = "stripe")
public class StripeGateway implements PaymentGateway {

    @Value("${STRIPE_SECRET_KEY:}")
    private String secretKey;

    private void requireKey() {
        if (secretKey == null || secretKey.isBlank()) {
            throw new IllegalStateException("ERR-PAY-CONFIG: STRIPE_SECRET_KEY 미설정 — Stripe 어댑터 비활성");
        }
    }

    @Override
    public Map<String, Object> charge(String orderNo, BigDecimal amount, String currency, String cardToken) {
        requireKey();
        // 운영 배포 시 Stripe PaymentIntents API 연동.
        throw new UnsupportedOperationException("ERR-PAY-IMPL: Stripe 실연동은 운영 배포 시 구현");
    }

    @Override
    public Map<String, Object> refund(String txnId, BigDecimal amount) {
        requireKey();
        throw new UnsupportedOperationException("ERR-PAY-IMPL: Stripe 환불은 운영 배포 시 구현");
    }

    @Override
    public String provider() {
        return "stripe";
    }
}
