package pickup_point

import (
	"context"

	"github.com/UpmeshLTD/urus-aio/infrastructure/db/entities"
	"github.com/UpmeshLTD/urus-aio/shipment/server/http/dto"
)

type Service interface {
	GetListOfPickupPoints(ctx context.Context, workspaceID string, req *dto.GetPickupPointsRequest) ([]*entities.PickupPoint, int64, error)
	GetPickupPointByID(ctx context.Context, workspaceID string, id entities.ID) (*entities.PickupPoint, error)

	CreatePickupPoint(ctx context.Context, pickupPoint *entities.PickupPoint) (*entities.PickupPoint, error)
	UpdatePickupPoint(ctx context.Context, workspaceID string, id entities.ID, pickupPoint *entities.PickupPoint) error
	DeletePickupPoint(ctx context.Context, workspaceID string, id entities.ID) error
}

type serviceImpl struct {
	repo Repository
}

func NewService(repo Repository) Service {
	return &serviceImpl{
		repo: repo,
	}
}

func (s *serviceImpl) GetListOfPickupPoints(ctx context.Context, workspaceID string, req *dto.GetPickupPointsRequest) ([]*entities.PickupPoint, int64, error) {
	return s.repo.GetListOfPickupPoints(ctx, workspaceID, req)
}

func (s *serviceImpl) GetPickupPointByID(ctx context.Context, workspaceID string, id entities.ID) (*entities.PickupPoint, error) {
	return s.repo.GetPickupPointByID(ctx, workspaceID, id)
}

func (s *serviceImpl) CreatePickupPoint(ctx context.Context, pickupPoint *entities.PickupPoint) (*entities.PickupPoint, error) {
	return s.repo.CreatePickupPoint(ctx, pickupPoint)
}

func (s *serviceImpl) UpdatePickupPoint(ctx context.Context, workspaceID string, id entities.ID, pickupPoint *entities.PickupPoint) error {
	return s.repo.UpdatePickupPoint(ctx, workspaceID, id, pickupPoint)
}

func (s *serviceImpl) DeletePickupPoint(ctx context.Context, workspaceID string, id entities.ID) error {
	return s.repo.DeletePickupPoint(ctx, workspaceID, id)
}
