// Copyright 2023 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package python

import (
	"github.com/bazelbuild/bazel-gazelle/rule"
)

const (
	pyBinaryKind  = "py_binary"
	pyLibraryKind = "py_library"
	pyTestKind    = "py_test"
)

// Kinds returns a map that maps rule names (kinds) and information on how to
// match and merge attributes that may be found in rules of those kinds.
func (*Python) Kinds() map[string]rule.KindInfo {
	return pyKinds
}

var pyKinds = map[string]rule.KindInfo{
	pyBinaryKind: {
		MatchAny: true,
		NonEmptyAttrs: map[string]bool{
			"deps":       true,
			"main":       true,
			"srcs":       true,
			"imports":    true,
			"visibility": true,
		},
		SubstituteAttrs: map[string]bool{},
		MergeableAttrs: map[string]bool{
			"srcs": true,
		},
		ResolveAttrs: map[string]bool{
			"deps": true,
		},
	},
	pyLibraryKind: {
		MatchAny: true,
		NonEmptyAttrs: map[string]bool{
			"deps":       true,
			"srcs":       true,
			"imports":    true,
			"visibility": true,
		},
		SubstituteAttrs: map[string]bool{},
		MergeableAttrs: map[string]bool{
			"srcs": true,
		},
		ResolveAttrs: map[string]bool{
			"deps": true,
		},
	},
	pyTestKind: {
		MatchAny: false,
		NonEmptyAttrs: map[string]bool{
			"deps":       true,
			"main":       true,
			"srcs":       true,
			"imports":    true,
			"visibility": true,
		},
		SubstituteAttrs: map[string]bool{},
		MergeableAttrs: map[string]bool{
			"srcs": true,
		},
		ResolveAttrs: map[string]bool{
			"deps": true,
		},
	},
}

// Loads returns .bzl files and symbols they define. Every rule generated by
// GenerateRules, now or in the past, should be loadable from one of these
// files.
func (py *Python) Loads() []rule.LoadInfo {
	return pyLoads
}

var pyLoads = []rule.LoadInfo{
	{
		Name: "@rules_python//python:defs.bzl",
		Symbols: []string{
			pyBinaryKind,
			pyLibraryKind,
			pyTestKind,
		},
	},
}
