package com.saas.voip.service;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service
@Slf4j
@RequiredArgsConstructor
public class TelnyxApiClient {

    private final RestTemplate restTemplate = new RestTemplate();

    @Value("${telnyx.api.key:}")
    private String apiKey;

    private static final String TELNYX_API_BASE = "https://api.telnyx.com/v2";

    public List<Map<String, Object>> listPhoneNumbers() {
        if (apiKey == null || apiKey.isEmpty()) {
            log.warn("⚠️ Telnyx API key not configured");
            return List.of();
        }

        try {
            log.info("📋 Fetching Telnyx phone numbers");

            String url = TELNYX_API_BASE + "/phone_numbers";

            HttpHeaders headers = new HttpHeaders();
            headers.setBearerAuth(apiKey);
            HttpEntity<?> request = new HttpEntity<>(headers);

            ResponseEntity<Map> response = restTemplate.exchange(
                    url,
                    HttpMethod.GET,
                    request,
                    Map.class);

            if (response.getStatusCode().is2xxSuccessful() && response.getBody() != null) {
                // Telnyx returns { "data": [ ... ] }
                Object dataObj = response.getBody().get("data");
                if (dataObj instanceof List) {
                    return (List<Map<String, Object>>) dataObj;
                }
            }

        } catch (Exception e) {
            log.error("❌ Failed to list Telnyx numbers: {}", e.getMessage());
        }

        return new ArrayList<>();
    }
}
