package com.agent.management.service;

import com.agent.management.model.entity.GraphSource;
import com.agent.management.rag.graph.GraphSchemaSnapshot;

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

public interface GraphSourceService {

    GraphSource create(GraphSource gs);

    GraphSource update(Long id, GraphSource gs);

    void delete(Long id);

    /** 测试连接（不持久化结果，用于表单预检） */
    TestResult testConnection(GraphSource gs);

    /** 测试已存在图谱连接并持久化结果 */
    TestResult testExisting(Long id);

    GraphSource get(Long id);

    /** 已解密密码（内部 Neo4jExecutor 使用） */
    GraphSource getDecrypted(Long id);

    List<GraphSource> listAll();

    /**
     * 执行只读 Cypher 查询，返回 cytoscape elements
     *
     * @param id     图谱源 ID
     * @param cypher 已通过白名单校验
     */
    Map<String, Object> executeQuery(Long id, String cypher);

    void explainQuery(Long id, String cypher);

    /** 列出图谱的所有 node labels */
    List<String> listLabels(Long id);

    /** 自动发现节点、属性、关系类型及方向。 */
    GraphSchemaSnapshot discoverSchema(Long id);
    Map<String,Object> discoverMetadata(Long id);

    record TestResult(boolean success, String message) {}
}
