package pkulaw

import (
	"github.com/tidbcloud/AgentTeam/internal/extension/registry"
	"github.com/tidbcloud/AgentTeam/internal/extension/spec"
)

const (
	ActionSearchLawArticles   = "search-law-articles"
	ActionGetLawArticle       = "get-law-article"
	ActionSearchLaws          = "search-laws"
	ActionSearchCases         = "search-cases"
	ActionSearchCaseDocuments = "search-case-documents"
)

// Definition returns the closed PKULaw legal-research catalog ported from the
// pinned OpenConnector contract. Dynamic MCP discovery and invocation are
// intentionally absent.
func Definition() registry.Definition {
	actions := []registry.DefinitionAction{
		{
			Name:         ActionSearchLawArticles,
			Summary:      "Search legal provisions",
			Description:  "Search authoritative PKULaw provisions using a natural-language legal question or fact pattern.",
			Safety:       readSafety(),
			InputSchema:  searchLawArticlesInputSchema(),
			OutputSchema: toolResultOutputSchema(),
		},
		{
			Name:         ActionGetLawArticle,
			Summary:      "Get a legal provision",
			Description:  "Retrieve an authoritative PKULaw provision by law title and article number.",
			Safety:       readSafety(),
			InputSchema:  getLawArticleInputSchema(),
			OutputSchema: toolResultOutputSchema(),
		},
		{
			Name:        ActionSearchLaws,
			Summary:     "Search laws and regulations",
			Description: "Search PKULaw laws and regulations by title or full-text keywords.",
			Safety:      readSafety(),
			InputSchema: keywordSearchInputSchema(
				"Input for searching laws and regulations by title or full-text keyword.",
			),
			OutputSchema: toolResultOutputSchema(),
		},
		{
			Name:         ActionSearchCases,
			Summary:      "Search judicial cases",
			Description:  "Search authoritative PKULaw judicial cases using a natural-language fact pattern.",
			Safety:       readSafety(),
			InputSchema:  searchCasesInputSchema(),
			OutputSchema: toolResultOutputSchema(),
		},
		{
			Name:        ActionSearchCaseDocuments,
			Summary:     "Search judicial case documents",
			Description: "Search detailed PKULaw judicial case records by title or full-text keywords.",
			Safety:      readSafety(),
			InputSchema: keywordSearchInputSchema(
				"Input for searching detailed judicial case records by title or full-text keyword.",
			),
			OutputSchema: toolResultOutputSchema(),
		},
	}
	return registry.Definition{
		Domain:      Domain,
		Version:     1,
		Name:        "PKULaw",
		Description: "Read authoritative legal provisions, laws, regulations, and judicial cases through PKULaw's fixed MCP services.",
		Actions:     actions,
	}
}

func readSafety() spec.Safety {
	return spec.Safety{
		Class:       "read",
		Idempotent:  true,
		Destructive: false,
	}
}
