<?php

namespace App\Http\Controllers;

use GuzzleHttp\Client;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class DetectMessageToneController extends Controller
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function __invoke(Request $request)
    {
        $message = $request->input('message');

        Log::debug('REQUEST HIT WITH DATA', $request->all());

        $client = new Client();

        $userTones  = collect(auth()->user()->ai_tones)
            ->map(function ($tone) {
                return "{$tone->name} ({$tone->instruction})";
            })->toArray();

        $constantTones = [
            'formal',
            'informal',
            'concise',
            'exciting',
            'normal',
        ];

        $inputTonesText = json_encode(array_merge($constantTones, $userTones));

        try {

            $apiData = [
                'message' => "Input Text: $message\nInput Tones: $inputTonesText",
                'agent' => config('services.snwolley_ai.tone_agent_id'),
                'stream' => false,
                'chat_id' => null,
                'service' => auth()->user()->username,
            ];

            $url = config('services.snwolley_ai.service_url') . '/v1/chat/completions';

            $response = $client->post($url, [
                'headers' => [
                    'Content-Type' => 'application/json',
                    'X-API-Key' => config('services.snwolley_ai.auth_api_key'),
                ],
                'json' => $apiData,
            ]);

            // Decode JSON response
            $responseBody = json_decode($response->getBody()->getContents(), true);

            Log::info("SNWOLLEY MESSAGE DETECTION API CALL", [
                'data' => $apiData,
                'response' => $responseBody,
            ]);

            // Return JSON response
            return response()->json($responseBody);
        } catch (\GuzzleHttp\Exception\RequestException $e) {
            // Handle exceptions and return error response

            Log::error("ERROR FOR SNWOLLEY MESSAGE DETECTION API CALL", [
                'data' => $apiData,
                'error' => $e->getMessage(),
                'file' => "{$e->getFile()}:{$e->getLine()}",
                'trace' => $e->getTraceAsString(),
            ]);
            // return response()->json([
            //     'error' => "normal",
            // ], $e->getCode() ?: 500);

            response()->json(['content' => 'normal']);
        }
    }
}
