/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to you 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 avatica

import (
	"regexp"
	"strconv"

	"github.com/apache/calcite-avatica-go/message"
)

// Error severity codes
const (
	Eunknown int8 = iota
	Efatal
	Eerror
	Ewarning
)

// RPCMetadata contains metadata about the call that caused the error.
type RPCMetadata struct {
	ServerAddress string
}

// ErrorCode represents the error code returned by the avatica server
type ErrorCode uint32

// SQLState represents the SQL code returned by the avatica server
type SQLState string

// ResponseError is an error type that contains detailed information on
// what caused the server to return an error.
type ResponseError struct {
	Exceptions    []string
	HasExceptions bool
	ErrorMessage  string
	Severity      int8
	ErrorCode     ErrorCode
	SqlState      SQLState
	Metadata      *RPCMetadata
}

func (r ResponseError) Error() string {

	msg := "An error was encountered while processing your request"

	if r.ErrorMessage != "" {
		msg += ": " + r.ErrorMessage
	} else if len(r.Exceptions) > 0 {
		msg += ":\n" + r.Exceptions[0]
	}

	return msg
}

// Name returns the name of the error encountered by the server.
func (r ResponseError) Name() string {
	return errorCodeNames[r.ErrorCode]
}

// errorResponseToReponseError converts an error protocol buffer response
// to a native golang error.
func errorResponseToResponseError(message *message.ErrorResponse) ResponseError {

	var (
		errorCode int
		sqlState  string
	)

	re := regexp.MustCompile(`ERROR (\d+) \(([0-9a-zA-Z]+)\)`)
	codes := re.FindStringSubmatch(message.ErrorMessage)

	if len(codes) > 1 {
		errorCode, _ = strconv.Atoi(codes[1])
	}

	if len(codes) > 2 {
		sqlState = codes[2]
	}

	err := ResponseError{
		Exceptions:   message.Exceptions,
		ErrorMessage: message.ErrorMessage,
		Severity:     int8(message.Severity),
		ErrorCode:    ErrorCode(errorCode),
		SqlState:     SQLState(sqlState),
		Metadata: &RPCMetadata{
			ServerAddress: message.GetMetadata().ServerAddress,
		},
	}

	return err
}

var errorCodeNames = map[ErrorCode]string{

	// Connection exceptions (errorcode 01, sqlstate 08)
	101: "io_exception",
	102: "malformed_connection_url",
	103: "cannot_establish_connection",

	// Data exceptions (errorcode 02, sqlstate 22)
	201: "illegal_data",
	202: "divide_by_zero",
	203: "type_mismatch",
	204: "value_in_upsert_not_constant",
	205: "malformed_url",
	206: "data_exceeds_max_capacity",
	207: "missing_max_length",
	208: "nonpositive_max_length",
	209: "decimal_precision_out_of_range",
	212: "server_arithmetic_error",
	213: "value_outside_range",
	214: "value_in_list_not_constant",
	215: "single_row_subquery_returns_multiple_rows",
	216: "subquery_returns_different_number_of_fields",
	217: "ambiguous_join_condition",
	218: "constraint_violation",

	301: "concurrent_table_mutation",
	302: "cannot_index_column_on_type",

	// Invalid cursor state (errorcode 04, sqlstate 24)
	401: "cursor_before_first_row",
	402: "cursor_past_last_row",

	// Syntax error or access rule violation (errorcode 05, sqlstate 42)
	501: "ambiguous_table",
	502: "ambiguous_column",
	503: "index_missing_pk_columns",
	504: "column_not_found",
	505: "read_only_table",
	506: "cannot_drop_pk",
	509: "primary_key_missing",
	510: "primary_key_already_exists",
	511: "order_by_not_in_select_distinct",
	512: "invalid_primary_key_constraint",
	513: "array_not_allowed_in_primary_key",
	514: "column_exist_in_def",
	515: "order_by_array_not_supported",
	516: "non_equality_array_comparison",
	517: "invalid_not_null_constraint",

	// Invalid transaction state (errorcode 05, sqlstate 25)
	518: "read_only_connection",
	519: "varbinary_array_not_supported",

	// Expression index exceptions
	520: "aggregate_expression_not_allowed_in_index",
	521: "non_deterministic_expression_not_allowed_in_index",
	522: "stateless_expression_not_allowed_in_index",

	// Transaction exceptions
	523: "transaction_conflict_exception",
	524: "transaction_exception",

	// Union all related errors
	525: "select_column_num_in_unionall_diffs",
	526: "select_column_type_in_unionall_diffs",

	// Row timestamp column related errors
	527: "rowtimestamp_one_pk_col_only",
	528: "rowtimestamp_pk_col_only",
	529: "rowtimestamp_create_only",
	530: "rowtimestamp_col_invalid_type",
	531: "rowtimestamp_not_allowed_on_view",
	532: "invalid_scn",

	// Column family related exceptions
	1000: "single_pk_may_not_be_null",
	1001: "column_family_not_found",
	1002: "properties_for_family",
	1003: "primary_key_with_family_name",
	1004: "primary_key_out_of_order",
	1005: "varbinary_in_row_key",
	1006: "not_nullable_column_in_row_key",
	1015: "varbinary_last_pk",
	1023: "nullable_fixed_width_last_pk",
	1036: "cannot_modify_view_pk",
	1037: "base_table_column",

	// Key/value column related errors
	1007: "key_value_not_null",

	// View related errors
	1008: "view_with_table_config",
	1009: "view_with_properties",

	// Table related errors that are not in standard code
	1010: "cannot_mutate_table",
	1011: "unexpected_mutation_code",
	1012: "table_undefined",
	1013: "table_already_exist",

	// Syntax error
	1014: "type_not_supported_for_operator",
	1016: "aggregate_in_group_by",
	1017: "aggregate_in_where",
	1018: "aggregate_with_not_group_by_column",
	1019: "only_aggregate_in_having_clause",
	1020: "upsert_column_numbers_mismatch",

	// Table properties exception
	1021: "invalid_bucket_num",
	1022: "no_splits_on_salted_table",
	1024: "salt_only_on_create_table",
	1025: "set_unsupported_prop_on_alter_table",
	1038: "cannot_add_not_nullable_column",
	1026: "no_mutable_indexes",
	1028: "invalid_index_state_transition",
	1029: "invalid_mutable_index_config",
	1030: "cannot_create_tenant_specific_table",
	1034: "default_column_family_only_on_create_table",
	1040: "insufficient_multi_tenant_columns",
	1041: "tenantid_is_of_wrong_type",
	1045: "view_where_is_constant",
	1046: "cannot_update_view_column",
	1047: "too_many_indexes",
	1048: "no_local_index_on_table_with_immutable_rows",
	1049: "column_family_not_allowed_table_property",
	1050: "column_family_not_allowed_for_ttl",
	1051: "cannot_alter_property",
	1052: "cannot_set_property_for_column_not_added",
	1053: "cannot_set_table_property_add_column",
	1054: "no_local_indexes",
	1055: "unallowed_local_indexes",
	1056: "desc_varbinary_not_supported",
	1057: "no_table_specified_for_wildcard_select",
	1058: "unsupported_group_by_expressions",
	1069: "default_column_family_on_shared_table",
	1070: "only_table_may_be_declared_transactional",
	1071: "tx_may_not_switch_to_non_tx",
	1072: "store_nulls_must_be_true_for_transactional",
	1073: "cannot_start_transaction_with_scn_set",
	1074: "tx_max_versions_must_be_greater_than_one",
	1075: "cannot_specify_scn_for_txn_table",
	1076: "null_transaction_context",
	1077: "transaction_failed",
	1078: "cannot_create_txn_table_if_txns_disabled",
	1079: "cannot_alter_to_be_txn_if_txns_disabled",
	1080: "cannot_create_txn_table_with_row_timestamp",
	1081: "cannot_alter_to_be_txn_with_row_timestamp",
	1082: "tx_must_be_enabled_to_set_tx_context",
	1083: "tx_must_be_enabled_to_set_auto_flush",
	1084: "tx_must_be_enabled_to_set_isolation_level",
	1085: "tx_unable_to_get_write_fence",
	1086: "sequence_not_castable_to_auto_partition_id_column",
	1087: "cannot_coerce_auto_partition_id",

	// Sequence related
	1200: "sequence_already_exist",
	1201: "sequence_undefined",
	1202: "start_with_must_be_constant",
	1203: "increment_by_must_be_constant",
	1204: "cache_must_be_non_negative_constant",
	1205: "invalid_use_of_next_value_for",
	1206: "cannot_call_current_before_next_value",
	1207: "empty_sequence_cache",
	1208: "minvalue_must_be_constant",
	1209: "maxvalue_must_be_constant",
	1210: "minvalue_must_be_less_than_or_equal_to_maxvalue",
	1211: "starts_with_must_be_between_min_max_value",
	1212: "sequence_val_reached_max_value",
	1213: "sequence_val_reached_min_value",
	1214: "increment_by_must_not_be_zero",
	1215: "num_seq_to_allocate_must_be_constant",
	1216: "num_seq_to_allocate_not_supported",
	1217: "auto_partition_sequence_undefined",

	// Parser error. (errorcode 06, sqlstate 42p)
	601: "parser_error",
	602: "missing_token",
	603: "unwanted_token",
	604: "mismatched_token",
	605: "unknown_function",

	// Implementation defined class. execution exceptions (errorcode 11, sqlstate xcl)
	1101: "resultset_closed",
	1102: "get_table_regions_fail",
	1103: "execute_query_not_applicable",
	1104: "execute_update_not_applicable",
	1105: "split_point_not_constant",
	1106: "batch_exception",
	1107: "execute_update_with_non_empty_batch",
	1108: "stale_region_boundary_cache",
	1109: "cannot_split_local_index",
	1110: "cannot_salt_local_index",
	1120: "index_failure_block_write",
	1130: "update_cache_frequency_invalid",
	1131: "cannot_drop_col_append_only_schema",
	1132: "view_append_only_schema",

	// Implementation defined class. phoenix internal error. (errorcode 20, sqlstate int)
	2001: "cannot_call_method_on_type",
	2002: "class_not_unwrappable",
	2003: "param_index_out_of_bound",
	2004: "param_value_unbound",
	2005: "interrupted_exception",
	2006: "incompatible_client_server_jar",
	2007: "outdated_jars",
	2008: "index_metadata_not_found",
	2009: "unknown_error_code",
	6000: "operation_timed_out",
	6001: "function_undefined",
	6002: "function_already_exist",
	6003: "unallowed_user_defined_functions",
	721:  "schema_already_exists",
	722:  "schema_not_found",
	723:  "cannot_mutate_schema",
}
