package com.saas.shared.service;

import com.saas.shared.dto.TenantResolutionResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * Centralized helper to resolve tenant/schema for webhook controllers.
 * Delegates to PhoneNumberBoundaryService (multi-strategy: TO, FROM fallback, CUSTOM_MAPPING).
 */
@Component
@RequiredArgsConstructor
@Slf4j
public class WebhookTenantResolver {

    private final PhoneNumberBoundaryService phoneNumberBoundaryService;

    /**
     * Resolve tenant using destination and caller numbers (multi-strategy).
     * @param toNumber destination number (To)
     * @param fromNumber caller number (From)
     * @return TenantResolutionResult with tenantId, schemaName, strategy
     */
    public TenantResolutionResult resolveTenant(String toNumber, String fromNumber) {
        TenantResolutionResult result = phoneNumberBoundaryService.resolveTenantFromPhoneNumbers(toNumber, fromNumber);
        if (result.isResolved()) {
            log.info("✅ [WebhookTenantResolver] tenant={} schema={} strategy={} matched={}",
                    result.getTenantId(), result.getSchemaName(), result.getStrategy(), result.getMatchedPhoneNumber());
        } else {
            log.warn("⚠️ [WebhookTenantResolver] unresolved tenant for To={} From={} reason={}",
                    toNumber, fromNumber, result.getErrorMessage());
        }
        return result;
    }
}
