<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\File;
use App\Custom\SQLConnection;
use App\Custom\Misc;
use stdClass;
use Response;
use CURLFile;
use Session;
use Request;
use Route;
use DB;


class OpenAiController extends Controller{     
     
    // Endopoint que sirve para cargar los archivos(batch) a OpenAI
    public static function openAiFileEndpoit($batchFile){
        $apiKey = env("apiKey_chatgpt"); 
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, env('GPT_API_FILES'));
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            "Authorization: Bearer $apiKey",
            "Content-Type: multipart/form-data"
        ]);
        curl_setopt($ch, CURLOPT_POSTFIELDS, [
            'purpose' => 'batch',
            'file' => new CURLFile(realpath($batchFile))
        ]);
    
        $response = curl_exec($ch);
        if (curl_errno($ch)) {
            return response()->json(['error' => 'cURL error: ' . curl_error($ch)], 500);
        }
    
        curl_close($ch);
        
        $respuesta = json_decode($response, true);
        
        return $respuesta;
    }   

    public static function completionsEndpoint($dataString, $providerKey){
        // URL y cabeceras de la API
        $url = env('GPT_API_COMPLETIONS');
        $headers = [
            "Content-Type: application/json",
            "OpenAI-Organization: " . env("Organization_CHATkey"),
            "Authorization: Bearer " . $providerKey
        ];

        // Inicializar cURL
        $ch = curl_init();
        curl_setopt_array($ch, [
            CURLOPT_URL => $url,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => $dataString,
            CURLOPT_HTTPHEADER => $headers,
            CURLOPT_RETURNTRANSFER => true
        ]);

        // Realizar la solicitud
        $response = curl_exec($ch);
        
        // Manejo de errores cURL
        if (curl_errno($ch)) {
            curl_close($ch);
            return 'Error en la solicitud: ' . curl_error($ch);
        }

        curl_close($ch);

        $respuesta = json_decode($response, true);

        return $respuesta;
    }

    public static function formateoCompletions($ai_provider,$system_prompt,$user_prompt,$textoDatos,$tokens){        
        // Preparar los datos para la solicitud
        $requestData = [
            'model' => $ai_provider,
            'messages' => [
                ['role' => 'system', 'content' => $system_prompt],
                ['role' => 'user', 'content' => $user_prompt],
                ['role' => 'assistant', 'content' => $textoDatos]
            ],
            'temperature' => 0,
            'max_completion_tokens' => $tokens
        ];

        $dataString = json_encode($requestData);
        
        return $dataString;
    }    
}