package com.arms.api.aichat.service;

import com.arms.api.aichat.domain.ChatMessage;
import com.arms.api.aichat.domain.ChatRoom;
import com.arms.api.aichat.dto.CardContextItem;
import com.arms.api.aichat.dto.LastSelectionRequest;
import com.arms.api.aichat.dto.RagDocsRequest;

import java.util.List;

public interface AiChatService {

    // 대화방 생성
    ChatRoom createRoom(String userId, String title, String pdServiceId, List<String> pdServiceVersionIds);

    // 메시지 저장
    ChatMessage saveMessage(String roomId, String role, String content);

    // 마지막 assistant 메시지 덮어쓰기 (체크박스 재답변용)
    void replaceLastAssistantMessage(String roomId, String content);

    // 대화방 목록 조회
    List<ChatRoom> findRoomByUserId(String userId);

    // 대화 내용 조회
    List<ChatMessage> findMessageByRoomId(String roomId);

    // 대화방 삭제
    void deleteRoom(String userId, String roomId);

    // 대화방 제품/버전 정보 업데이트
    void updateRoomPdService(String roomId, String pdServiceId, List<String> pdServiceVersionIds);

    // 마지막 선택한 pdService, pdServiceVersion 저장
    void saveLastSelection(String userId, String pdServiceId, List<String> pdServiceVersionIds);

    // 마지막 선택한 pdService, pdServiceVersion 조회
    LastSelectionRequest findLastSelection(String userId);

    // 마지막 선택한 pdService, pdServiceVersion 삭제
    void deleteLastSelection(String userId);

    // 카드 영역 조회 (입력창 하단, 고정 추천 카드)
    List<CardContextItem> findCardContext(String userId);

    // roomId별 RAG/Wiki 문서 저장 (질문할 때마다 덮어씀)
    void saveRagDocs(String roomId, RagDocsRequest request);

    // roomId별 RAG/Wiki 문서 조회
    RagDocsRequest findRagDocs(String roomId);

    // roomId별 RAG/Wiki 문서 삭제
    void deleteRagDocs(String roomId);
}
