package models

import (
	"strings"

	"github.com/authorizerdev/authorizer/server/graph/model"
	"github.com/authorizerdev/authorizer/server/refs"
)

// Note: any change here should be reflected in providers/casandra/provider.go as it does not have model support in collection creation

// WebhookLog model for db
type WebhookLog struct {
	Key        string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty" dynamo:"key,omitempty"` // for arangodb
	ID         string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id" dynamo:"id,hash"`
	HttpStatus int64  `json:"http_status" bson:"http_status" cql:"http_status" dynamo:"http_status"`
	Response   string `json:"response" bson:"response" cql:"response" dynamo:"response"`
	Request    string `json:"request" bson:"request" cql:"request" dynamo:"request"`
	WebhookID  string `gorm:"type:char(36)" json:"webhook_id" bson:"webhook_id" cql:"webhook_id" dynamo:"webhook_id" index:"webhook_id,hash"`
	CreatedAt  int64  `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"`
	UpdatedAt  int64  `json:"updated_at" bson:"updated_at" cql:"updated_at" dynamo:"updated_at"`
}

// AsAPIWebhookLog to return webhook log as graphql response object
func (w *WebhookLog) AsAPIWebhookLog() *model.WebhookLog {
	id := w.ID
	if strings.Contains(id, Collections.WebhookLog+"/") {
		id = strings.TrimPrefix(id, Collections.WebhookLog+"/")
	}
	return &model.WebhookLog{
		ID:         id,
		HTTPStatus: refs.NewInt64Ref(w.HttpStatus),
		Response:   refs.NewStringRef(w.Response),
		Request:    refs.NewStringRef(w.Request),
		WebhookID:  refs.NewStringRef(w.WebhookID),
		CreatedAt:  refs.NewInt64Ref(w.CreatedAt),
		UpdatedAt:  refs.NewInt64Ref(w.UpdatedAt),
	}
}
