import { CreateKnowledgeRequest, CreateKnowledgeResponse, DeleteKnowledgeRequest, InfoKnowledgeRequest, InfoKnowledgeResponse, ListKnowledgeRequest, ListKnowledgeResponse, UpdateKnowledgeRequest } from "./knowledge";
import { AddDocumentRequest, AddDocumentResponse, DeleteDocumentRequest, InfoDocumentRequest, InfoDocumentResponse, ListDocumentRequest, ListDocumentResponse, UpdateDocumentMetaRequest } from "./doc";
import { AddPointRequest, AddPointResponse, DeletePointRequest, InfoPointRequest, InfoPointResponse, ListPointRequest, ListPointResponse, UpdatePointRequest } from "./point";
import { RerankRequest, RerankResponse } from "./rerank";
import { SearchKnowledgeRequest, SearchKnowledgeResponse } from "./query";

export type VolcKnowledgeRequestParams =  VolcKnowledgeRequestKLCreate | VolcKnowledgeRequestKLList | VolcKnowledgeRequestKLInfo | VolcKnowledgeRequestKLUpdate | VolcKnowledgeRequestKLDelete | VolcKnowledgeRequestKLAddDoc | VolcKnowledgeRequestKLInfoDoc | VolcKnowledgeRequestKLListDoc | VolcKnowledgeRequestKLUpdateMeta | VolcKnowledgeRequestKLDeleteDoc | VolcKnowledgeRequestKLListPoint | VolcKnowledgeRequestKLUpdatePoint | VolcKnowledgeRequestKLInfoPoint | VolcKnowledgeRequestKLAddPoint | VolcKnowledgeRequestKLDeletePoint | VolcKnowledgeRequestKLSearch | VolcKnowledgeRequestKLRerank;

export type VolcKnowledgeRequestKLCreate = {
    endpoint: '/api/knowledge/collection/create';
    body: CreateKnowledgeRequest;
    method: 'POST';
}

export type VolcKnowledgeRequestKLUpdate = {
    endpoint: '/api/knowledge/collection/update';
    body: UpdateKnowledgeRequest;
    method: 'POST';
}

export type VolcKnowledgeRequestKLList = {
    endpoint: '/api/knowledge/collection/list';
    body: ListKnowledgeRequest;
    method: 'POST';
}

export type VolcKnowledgeRequestKLInfo = {
    endpoint: '/api/knowledge/collection/info';
    body: InfoKnowledgeRequest;
    method: 'POST';
}



export type VolcKnowledgeRequestKLDelete = {
    endpoint: '/api/knowledge/collection/delete';
    body: DeleteKnowledgeRequest;
    method: 'POST';
}

export type VolcKnowledgeRequestKLAddDoc = {
    endpoint: '/api/knowledge/doc/add';
    body: AddDocumentRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLInfoDoc = {
    endpoint: '/api/knowledge/doc/info';
    body: InfoDocumentRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLListDoc = {
    endpoint: '/api/knowledge/doc/list';
    body: ListDocumentRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLUpdateMeta = {
    endpoint: '/api/knowledge/doc/update_meta';
    body: UpdateDocumentMetaRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLDeleteDoc = {
    endpoint: '/api/knowledge/doc/delete';
    body: DeleteDocumentRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLListPoint = {
    endpoint: '/api/knowledge/point/list';
    body: ListPointRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLUpdatePoint = {
    endpoint: '/api/knowledge/point/update';
    body: UpdatePointRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLInfoPoint = {
    endpoint: '/api/knowledge/point/info';
    body: InfoPointRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLAddPoint = {
    endpoint: '/api/knowledge/point/add';
    body: AddPointRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLDeletePoint = {
    endpoint: '/api/knowledge/point/delete';
    body: DeletePointRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLSearch = {
    endpoint: '/api/knowledge/collection/search_knowledge';
    body: SearchKnowledgeRequest;
    method: 'POST';
};

export type VolcKnowledgeRequestKLRerank = {
    endpoint: '/api/knowledge/service/rerank';
    body: RerankRequest;
    method: 'POST';
};

export type VolcKnowledgeResponse = {
    code: number;
    message: string;
    request_id: string;
} & VolcKnowledgeResponseData;

export type VolcKnowledgeResponseData = {
    data: any;
} | ListKnowledgeResponse | InfoKnowledgeResponse | CreateKnowledgeResponse | AddDocumentResponse | InfoDocumentResponse | ListDocumentResponse | ListPointResponse | InfoPointResponse | AddPointResponse | SearchKnowledgeResponse | RerankResponse;