// Copyright 2019 PingCAP, Inc.
//
// 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,
// See the License for the specific language governing permissions and
// limitations under the License.

package plugin

import (
	"github.com/pingcap/parser/mysql"
	"github.com/pingcap/parser/terror"
)

var (
	errInvalidPluginID            = createPluginError(mysql.ErrInvalidPluginID)
	errInvalidPluginManifest      = createPluginError(mysql.ErrInvalidPluginManifest)
	errInvalidPluginName          = createPluginError(mysql.ErrInvalidPluginName)
	errInvalidPluginVersion       = createPluginError(mysql.ErrInvalidPluginVersion)
	errDuplicatePlugin            = createPluginError(mysql.ErrDuplicatePlugin)
	errInvalidPluginSysVarName    = createPluginError(mysql.ErrInvalidPluginSysVarName)
	errRequireVersionCheckFail    = createPluginError(mysql.ErrRequireVersionCheckFail)
	errUnsupportedReloadPlugin    = createPluginError(mysql.ErrUnsupportedReloadPlugin)
	errUnsupportedReloadPluginVar = createPluginError(mysql.ErrUnsupportedReloadPluginVar)
)

func createPluginError(code terror.ErrCode) *terror.Error {
	return terror.ClassPlugin.New(code, mysql.MySQLErrName[uint16(code)])
}

func init() {
	pluginMySQLErrCodes := map[terror.ErrCode]uint16{
		mysql.ErrInvalidPluginID:            mysql.ErrInvalidPluginID,
		mysql.ErrInvalidPluginManifest:      mysql.ErrInvalidPluginManifest,
		mysql.ErrInvalidPluginName:          mysql.ErrInvalidPluginName,
		mysql.ErrInvalidPluginVersion:       mysql.ErrInvalidPluginVersion,
		mysql.ErrDuplicatePlugin:            mysql.ErrDuplicatePlugin,
		mysql.ErrInvalidPluginSysVarName:    mysql.ErrInvalidPluginSysVarName,
		mysql.ErrRequireVersionCheckFail:    mysql.ErrRequireVersionCheckFail,
		mysql.ErrUnsupportedReloadPlugin:    mysql.ErrUnsupportedReloadPlugin,
		mysql.ErrUnsupportedReloadPluginVar: mysql.ErrUnsupportedReloadPluginVar,
	}
	terror.ErrClassToMySQLCodes[terror.ClassPlugin] = pluginMySQLErrCodes
}
