<?php

namespace App\Http\Controllers\Api\V1;

use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\Internal\ExchangeTokenRequest;
use App\Services\InternalTokenService;

/**
 * 내부 서버간 통신 컨트롤러
 *
 * MNG → API 서버간 인증 토큰 교환 등을 처리합니다.
 */
class InternalController extends Controller
{
    public function __construct(
        private InternalTokenService $tokenService
    ) {}

    /**
     * 토큰 교환
     *
     * MNG 서버에서 HMAC 서명된 페이로드로 API 토큰을 발급받습니다.
     */
    public function exchangeToken(ExchangeTokenRequest $request)
    {
        $validated = $request->validated();

        $result = $this->tokenService->exchange(
            userId: $validated['user_id'],
            tenantId: $validated['tenant_id'],
            exp: $validated['exp'],
            signature: $validated['signature']
        );

        if (! $result['success']) {
            return ApiResponse::error($result['error'], 401);
        }

        return ApiResponse::success(
            data: $result['data'],
            message: __('message.internal.token_exchanged')
        );
    }
}
