package com.warmer.web.controller;

import com.warmer.base.util.R;
import com.warmer.web.request.IntelligentSearchRequest;
import com.warmer.web.service.IntelligentSearchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.Map;
import java.util.List;

/**
 * 智能搜索控制器
 * 
 * @author tanc
 */
@RestController
@RequestMapping("/intelligent")
@CrossOrigin(origins = "*", maxAge = 3600)
public class IntelligentSearchController {

    @Autowired
    private IntelligentSearchService intelligentSearchService;

    /**
     * 智能搜索接口
     * 
     * @param request 搜索请求对象
     * @return 搜索结果
     */
    @PostMapping("/search")
    public R<Map<String, Object>> search(@RequestBody IntelligentSearchRequest request) {
        try {
            // 参数验证
            if (StringUtils.isEmpty(request.getText())) {
                return R.error("搜索文本不能为空");
            }
            
            if (StringUtils.isEmpty(request.getDomain())) {
                request.setDomain("default");
            }
            
            Map<String, Object> result = intelligentSearchService.intelligentSearch(
                request.getText(), 
                request.getDomain()
            );
            return R.success(result);
        } catch (Exception e) {
            return R.error("智能搜索失败: " + e.getMessage());
        }
    }

    /**
     * 仅通过文本搜索（使用默认领域）
     * 
     * @param text 搜索文本
     * @return 搜索结果
     */
    @PostMapping("/searchByText")
    public R<Map<String, Object>> searchByText(@RequestParam String text) {
        try {
            if (StringUtils.isEmpty(text)) {
                return R.error("搜索文本不能为空");
            }
            
            // 使用默认领域进行搜索
            Map<String, Object> result = intelligentSearchService.intelligentSearch(text, "default");
            return R.success(result);
        } catch (Exception e) {
            return R.error("智能搜索失败: " + e.getMessage());
        }
    }
    
    /**
     * 简单的GET接口用于测试
     * 
     * @param text 搜索文本
     * @param domain 领域名称（可选）
     * @return 搜索结果
     */
    @GetMapping("/search")
    public R<Map<String, Object>> searchGet(@RequestParam String text, 
                                           @RequestParam(required = false, defaultValue = "default") String domain) {
        try {
            if (StringUtils.isEmpty(text)) {
                return R.error("搜索文本不能为空");
            }
            
            Map<String, Object> result = intelligentSearchService.intelligentSearch(text, domain);
            return R.success(result);
        } catch (Exception e) {
            return R.error("智能搜索失败: " + e.getMessage());
        }
    }

    /**
     * 关键词提取接口
     * 
     * @param requestBody 包含原始文本的请求体
     * @return 提取的关键词列表
     */
    @PostMapping("/extractKeywords")
    public R<?> extractKeywords(@RequestBody Map<String, String> requestBody) {
        try {
            String text = requestBody.get("text");
            if (StringUtils.isEmpty(text)) {
                return R.error("输入文本不能为空");
            }
            
            // 使用关键词提取服务
            List<com.warmer.base.service.KeywordExtractionService.KeywordInfo> keywordInfoList = 
                intelligentSearchService.getKeywordExtractionResult(text);
            return R.success(keywordInfoList);
        } catch (Exception e) {
            return R.error("关键词提取失败: " + e.getMessage());
        }
    }
    
    /**
     * 获取搜索建议（输入提示）
     * 
     * @param query 查询关键词
     * @param domain 领域名称
     * @return 节点名称建议列表
     */
    @GetMapping("/suggestions")
    public R<List<String>> getSuggestions(@RequestParam String query, 
                                          @RequestParam(required = false) String domain) {
        try {
            if (query == null || query.trim().isEmpty()) {
                return R.success(new java.util.ArrayList<>());
            }
            
            // 如果没有指定领域，使用默认领域
            if (domain == null || domain.trim().isEmpty()) {
                domain = "default";
            }
            
            List<String> suggestions = intelligentSearchService.getSearchSuggestions(query, domain);
            return R.success(suggestions);
        } catch (Exception e) {
            return R.error("获取搜索建议失败: " + e.getMessage());
        }
    }
}