package service

import (
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/engine"

	"go.uber.org/zap"
)

func bigQueryFailureLogFields(err error) []zap.Field {
	diagnostics, ok := engine.AsBigQueryQueryError(err)
	if !ok {
		return nil
	}
	return []zap.Field{
		zap.String("bigquery_query_id", diagnostics.QueryID),
		zap.String("bigquery_error_source", diagnostics.ErrorSource),
		zap.String("bigquery_reason", diagnostics.Reason),
		zap.Int("bigquery_error_count", diagnostics.ErrorCount),
		zap.String("bigquery_message_shape", diagnostics.MessageShape),
		zap.Bool("bigquery_has_suggestion", diagnostics.HasSuggestion),
	}
}

func bigQueryTopSQLSetupFailureLogFields(err error) []zap.Field {
	diagnostics, ok := engine.AsBigQueryTopSQLSetupError(err)
	if !ok {
		return nil
	}
	return []zap.Field{
		zap.String("topsql_setup_operation", diagnostics.Operation),
		zap.String("topsql_object_kind", diagnostics.ObjectKind),
		zap.String("topsql_object_state", diagnostics.ObjectState),
		zap.String("bigquery_error_source", diagnostics.ErrorSource),
		zap.String("bigquery_reason", diagnostics.Reason),
		zap.Int("bigquery_http_status", diagnostics.HTTPStatus),
		zap.String("bigquery_query_id", diagnostics.QueryID),
		zap.Int("topsql_instance_count", diagnostics.InstanceCount),
		zap.Int("topsql_source_uri_count", diagnostics.SourceURICount),
	}
}
