<?php

namespace app\api\controller;

use app\common\controller\Api;
use Symfony\Component\HttpFoundation\StreamedResponse;
use think\Db;
use app\common\library\Deepseek as DeepseekAI;
/**
 * AI
 */
class Deepseek extends Api
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    public function test()
    {
        // 这是模拟的文本片段 - 实际应替换为真实的API调用
        $textChunks = [
            "你好!这是 DeepSeek 的流式文本响应。\n\n",
            "我正在逐块返回文本内容。\n",
            "这种方式可以实现实时输出效果。\n",
            "这种方式可以实现实时输出效果。\n",
            "这种方式可以实现实时输出效果。\n",
            "这种方式可以实现实时输出效果。\n",
            "最后一块内容。\n"
        ];

        // 逐块输出文本
        foreach ($textChunks as $chunk) {
            echo $chunk;
            ob_flush(); // 刷新PHP输出缓冲区
            flush();    // 刷新系统缓冲区
            sleep(1); // 暂停0.3秒模拟网络延迟
        }
    }

    public function deepseek(){
        $config = config('deepseek');
        $apiKey = $config['key']; //
        $url = 'https://api.deepseek.com/chat/completions';

        $params = input();
        $data = [
            'model' => $params['model'],
            'messages' => $params['messages'],
//            "frequency_penalty" => 0,
            "max_tokens"        => 2048,
            /*"presence_penalty"  => 0,
            "response_format"   => [
                "type" => $params['type']
            ],
            "stop"              => null,*/
            "stream"            => true,
            /*"stream_options"    => null,
            "temperature"       => 1,
            "top_p"             => 1,
            "tools"             => null,
            "tool_choice"       => "none",
            "logprobs"          => false,
            "top_logprobs"      => null*/
        ];

        // 初始化cURL会话
        $ch = curl_init($url);

// 设置cURL选项
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => json_encode($data),
            CURLOPT_HTTPHEADER => [
                'Content-Type: application/json',
                'Authorization: Bearer ' . $apiKey,
                'Accept: text/event-stream' // 重要:声明接受事件流
            ],
            CURLOPT_WRITEFUNCTION => function($ch, $data) {

                echo $data;
                ob_flush();
                flush();

                return strlen($data); // 返回已处理数据长度
            }
        ]);

        // 执行请求
        $response = curl_exec($ch);

        // 错误处理
        if (curl_errno($ch)) {
            echo 'Error: ' . curl_error($ch);
        }

        // 关闭连接
        curl_close($ch);

    }

}