package kz.konturai.parser.controller;

import kz.konturai.parser.dto.ApiResponse;
import kz.konturai.parser.service.FacebookPostingService;
import kz.konturai.parser.service.JwtService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * Контроллер для настройки Facebook (обмен токенов и т.д.)
 */
@RestController
@RequestMapping("/api/facebook/config")
@RequiredArgsConstructor
public class FacebookConfigController {

    private final FacebookPostingService facebookPostingService;
    private final JwtService jwtService;

    private String extractUserIdFromHeader(String authHeader) {
        if (authHeader == null || authHeader.isEmpty()) {
            return null;
        }
        try {
            return jwtService.extractUserIdFromHeader(authHeader);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * Помощник для обмена временного токена на долгосрочный.
     * 
     * POST /api/facebook/config/exchange-token
     * Body: { "shortToken": "...", "pageId": "..." }
     */
    @PostMapping("/exchange-token")
    public ResponseEntity<?> exchangeToken(
            @RequestHeader(value = "Authorization", required = false) String authHeader,
            @RequestBody Map<String, String> request) {

        String userId = extractUserIdFromHeader(authHeader);
        if (userId == null) {
            return ResponseEntity.status(401).body(ApiResponse.error("Не авторизован", null));
        }

        String shortToken = request.get("shortToken");
        String pageId = request.get("pageId");

        if (shortToken == null || pageId == null) {
            return ResponseEntity.badRequest().body(ApiResponse.error("shortToken и pageId обязательны", null));
        }

        try {
            String longLivedToken = facebookPostingService.exchangeForLongLivedPageToken(shortToken, pageId);
            return ResponseEntity.ok(ApiResponse.success("Токен успешно обменян. Сохраните его в настройках.", 
                Map.of("longLivedToken", longLivedToken)));
        } catch (Exception e) {
            return ResponseEntity.status(500).body(ApiResponse.error("Ошибка обмена: " + e.getMessage(), null));
        }
    }
}
