package com.arms.api.toolcalling.service;

import com.arms.api.util.advisors.SimpleLogAdvisor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Mono;

@Slf4j
@Service
@RequiredArgsConstructor
public class ToolCallingServiceImpl implements ToolCallingService {

    private final ChatModel chatModel;
    private final SimpleLogAdvisor simpleLogAdvisor;
    private final ToolsService toolsService;

    @Override
    public Mono<String> toolCalling(String message) {
        ChatClient chatClient = ChatClient.builder(chatModel)
                .defaultTools(toolsService)
                .build();

        return Mono.fromCallable(() ->
                chatClient.prompt()
                        .advisors(simpleLogAdvisor)
                        .user(message)
                        .call()
                        .content()
        ).subscribeOn(reactor.core.scheduler.Schedulers.boundedElastic());
    }
}
