package shipment_status_log

import (
	"context"
	"github.com/UpmeshLTD/urus-aio/infrastructure/db/entities"
	"gorm.io/gorm"
)

type Repository interface {
	GetList(ctx context.Context, db *gorm.DB, courierTrackingID string) ([]*entities.ShipmentStatusLog, error)
	Create(ctx context.Context, db *gorm.DB, entity *entities.ShipmentStatusLog) error
	Update(ctx context.Context, db *gorm.DB, courierTrackingID string, maps map[string]interface{}) error
}

type repositoryImpl struct {
}

func NewRepository() Repository {
	return &repositoryImpl{}
}

func (r repositoryImpl) GetList(ctx context.Context, db *gorm.DB, courierTrackingID string) ([]*entities.ShipmentStatusLog, error) {
	var logs []*entities.ShipmentStatusLog
	if err := db.Where(&entities.ShipmentStatusLog{
		CourierTrackingID: courierTrackingID,
	}).Order("created_at asc").Find(&logs).Error; err != nil {
		return nil, err
	}
	return logs, nil
}

func (r repositoryImpl) Create(ctx context.Context, db *gorm.DB, entity *entities.ShipmentStatusLog) error {
	return db.Model(&entities.ShipmentStatusLog{}).Create(entity).Error
}

func (r repositoryImpl) Update(ctx context.Context, db *gorm.DB, courierTrackingID string, maps map[string]interface{}) error {
	return db.Model(&entities.ShipmentStatusLog{}).Where("courier_tracking_id = ?", courierTrackingID).Updates(maps).Error
}
