package server_grpc

import (
	"context"
	"github.com/ManyakRus/starter/micro"
	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/network/grpc/grpc_proto"
	"gitlab.aescorp.ru/dsp_dev/claim/sync_service/pkg/object_model/entities/lawsuit_status_types"
)

// LawsuitStatusType_Read - читает и возвращает модель из БД
func (s *ServerGRPC) LawsuitStatusType_Read(ctx context.Context, Request *grpc_proto.RequestId) (*grpc_proto.Response, error) {
	var Otvet grpc_proto.Response
	var err error

	//проверим контекст уже отменён
	if micro.ContextDone(ctx) == true {
		err = context.Canceled
		return &Otvet, err
	}

	//проверим совпадения версии модели
	VersionServer := lawsuit_status_types.LawsuitStatusType{}.GetStructVersion()
	VersionClient := Request.VersionModel
	if VersionServer != VersionClient {
		err = ErrorModelVersion(lawsuit_status_types.LawsuitStatusType{})
		return &Otvet, err
	}

	//запрос в БД
	Model := &lawsuit_status_types.LawsuitStatusType{}
	Model.ID = Request.ID
	err = Model.Read()
	if err != nil {
		return &Otvet, err
	}

	//заполяем ответ
	ModelString, err := Model.GetJSON()
	if err != nil {
		return &Otvet, err
	}
	Otvet.ModelString = ModelString

	return &Otvet, err
}

// LawsuitStatusType_Delete - записывает в БД is_deleted = true и возвращает модель из БД
func (s *ServerGRPC) LawsuitStatusType_Delete(ctx context.Context, Request *grpc_proto.RequestId) (*grpc_proto.Response, error) {
	var Otvet grpc_proto.Response
	var err error

	//проверим контекст уже отменён
	if micro.ContextDone(ctx) == true {
		err = context.Canceled
		return &Otvet, err
	}

	//проверим совпадения версии модели
	VersionServer := lawsuit_status_types.LawsuitStatusType{}.GetStructVersion()
	VersionClient := Request.VersionModel
	if VersionServer != VersionClient {
		err = ErrorModelVersion(lawsuit_status_types.LawsuitStatusType{})
		return &Otvet, err
	}

	//запрос в БД
	Model := &lawsuit_status_types.LawsuitStatusType{}
	Model.ID = Request.ID
	err = Model.Delete()
	if err != nil {
		return &Otvet, err
	}

	//заполяем ответ
	ModelString, err := Model.GetJSON()
	if err != nil {
		return &Otvet, err
	}
	Otvet.ModelString = ModelString

	return &Otvet, err
}

// LawsuitStatusType_Restore - записывает в БД is_deleted = false и возвращает модель из БД
func (s *ServerGRPC) LawsuitStatusType_Restore(ctx context.Context, Request *grpc_proto.RequestId) (*grpc_proto.Response, error) {
	var Otvet grpc_proto.Response
	var err error

	//проверим контекст уже отменён
	if micro.ContextDone(ctx) == true {
		err = context.Canceled
		return &Otvet, err
	}

	//проверим совпадения версии модели
	VersionServer := lawsuit_status_types.LawsuitStatusType{}.GetStructVersion()
	VersionClient := Request.VersionModel
	if VersionServer != VersionClient {
		err = ErrorModelVersion(lawsuit_status_types.LawsuitStatusType{})
		return &Otvet, err
	}

	//запрос в БД
	Model := &lawsuit_status_types.LawsuitStatusType{}
	Model.ID = Request.ID
	err = Model.Restore()
	if err != nil {
		return &Otvet, err
	}

	//заполяем ответ
	ModelString, err := Model.GetJSON()
	if err != nil {
		return &Otvet, err
	}
	Otvet.ModelString = ModelString

	return &Otvet, err
}

// LawsuitStatusType_Create - создаёт новую запись в БД
func (s *ServerGRPC) LawsuitStatusType_Create(ctx context.Context, Request *grpc_proto.RequestModel) (*grpc_proto.Response, error) {
	var Otvet grpc_proto.Response
	var err error

	//проверим контекст уже отменён
	if micro.ContextDone(ctx) == true {
		err = context.Canceled
		return &Otvet, err
	}

	//проверим совпадения версии модели
	VersionServer := lawsuit_status_types.LawsuitStatusType{}.GetStructVersion()
	VersionClient := Request.VersionModel
	if VersionServer != VersionClient {
		err = ErrorModelVersion(lawsuit_status_types.LawsuitStatusType{})
		return &Otvet, err
	}

	//получим модель из строки JSON
	Model := &lawsuit_status_types.LawsuitStatusType{}
	err = Model.GetModelFromJSON(Request.ModelString)
	if err != nil {
		return &Otvet, err
	}

	//запрос в БД
	err = Model.Create()
	if err != nil {
		return &Otvet, err
	}

	//заполяем ответ
	ModelString, err := Model.GetJSON()
	if err != nil {
		return &Otvet, err
	}
	Otvet.ModelString = ModelString

	return &Otvet, err
}

// LawsuitStatusType_Update - обновляет новую запись в БД
func (s *ServerGRPC) LawsuitStatusType_Update(ctx context.Context, Request *grpc_proto.RequestModel) (*grpc_proto.Response, error) {
	var Otvet grpc_proto.Response
	var err error

	//проверим контекст уже отменён
	if micro.ContextDone(ctx) == true {
		err = context.Canceled
		return &Otvet, err
	}

	//проверим совпадения версии модели
	VersionServer := lawsuit_status_types.LawsuitStatusType{}.GetStructVersion()
	VersionClient := Request.VersionModel
	if VersionServer != VersionClient {
		err = ErrorModelVersion(lawsuit_status_types.LawsuitStatusType{})
		return &Otvet, err
	}

	//получим модель из строки JSON
	Model := &lawsuit_status_types.LawsuitStatusType{}
	err = Model.GetModelFromJSON(Request.ModelString)
	if err != nil {
		return &Otvet, err
	}

	//запрос в БД
	err = Model.Update()
	if err != nil {
		return &Otvet, err
	}

	//заполяем ответ
	ModelString, err := Model.GetJSON()
	if err != nil {
		return &Otvet, err
	}
	Otvet.ModelString = ModelString

	return &Otvet, err
}

// LawsuitStatusType_Save - записывает (создаёт или обновляет) запись в БД
func (s *ServerGRPC) LawsuitStatusType_Save(ctx context.Context, Request *grpc_proto.RequestModel) (*grpc_proto.Response, error) {
	var Otvet grpc_proto.Response
	var err error

	//проверим контекст уже отменён
	if micro.ContextDone(ctx) == true {
		err = context.Canceled
		return &Otvet, err
	}

	//проверим совпадения версии модели
	VersionServer := lawsuit_status_types.LawsuitStatusType{}.GetStructVersion()
	VersionClient := Request.VersionModel
	if VersionServer != VersionClient {
		err = ErrorModelVersion(lawsuit_status_types.LawsuitStatusType{})
		return &Otvet, err
	}

	//получим модель из строки JSON
	Model := lawsuit_status_types.LawsuitStatusType{}
	err = Model.GetModelFromJSON(Request.ModelString)
	if err != nil {
		return &Otvet, err
	}

	//запрос в БД
	err = Model.Save()
	if err != nil {
		return &Otvet, err
	}

	//заполяем ответ
	ModelString, err := Model.GetJSON()
	if err != nil {
		return &Otvet, err
	}
	Otvet.ModelString = ModelString

	return &Otvet, err
}

// LawsuitStatusType_FindByExtID - возвращает запись из БД по ext_id и connection_id
func (s *ServerGRPC) LawsuitStatusType_FindByExtID(ctx context.Context, Request *grpc_proto.RequestExtId) (*grpc_proto.Response, error) {
	var Otvet grpc_proto.Response
	var err error

	//проверим контекст уже отменён
	if micro.ContextDone(ctx) == true {
		err = context.Canceled
		return &Otvet, err
	}

	//проверим совпадения версии модели
	VersionServer := lawsuit_status_types.LawsuitStatusType{}.GetStructVersion()
	VersionClient := Request.VersionModel
	if VersionServer != VersionClient {
		err = ErrorModelVersion(lawsuit_status_types.LawsuitStatusType{})
		return &Otvet, err
	}

	//запрос в БД
	Model := &lawsuit_status_types.LawsuitStatusType{}
	Model.ExtID = Request.ExtId
	Model.ConnectionID = Request.ConnectionId
	err = Model.Find_ByExtID()
	if err != nil {
		return &Otvet, err
	}

	//заполяем ответ
	ModelString, err := Model.GetJSON()
	if err != nil {
		return &Otvet, err
	}
	Otvet.ModelString = ModelString

	return &Otvet, err
}
