package services

// import (
// 	"log"
// 	"time"

// 	"rijig/dto"
// 	"rijig/internal/repositories"
// 	"rijig/model"

// 	"github.com/google/uuid"
// )

// type CartService struct {
// 	Repo repositories.CartRepository
// }

// func NewCartService(repo repositories.CartRepository) *CartService {
// 	return &CartService{Repo: repo}
// }

// func (s *CartService) CommitCartToDatabase(userID string) error {
// 	items, err := GetCartItems(userID)
// 	if err != nil || len(items) == 0 {
// 		log.Printf("No items to commit for user: %s", userID)
// 		return err
// 	}

// 	var cartItems []model.CartItem
// 	var totalAmount float32
// 	var estimatedTotal float32

// 	for _, item := range items {
// 		trash, err := s.Repo.GetTrashCategoryByID(item.TrashCategoryID)
// 		if err != nil {
// 			log.Printf("Trash category not found for trashID: %s", item.TrashCategoryID)
// 			continue
// 		}

// 		subTotal := float32(trash.EstimatedPrice) * item.Amount
// 		totalAmount += item.Amount
// 		estimatedTotal += subTotal

// 		cartItems = append(cartItems, model.CartItem{
// 			ID:                     uuid.NewString(),
// 			TrashCategoryID:                item.TrashCategoryID,
// 			Amount:                 item.Amount,
// 			SubTotalEstimatedPrice: subTotal,
// 		})
// 	}

// 	cart := &model.Cart{
// 		ID:                  uuid.NewString(),
// 		UserID:              userID,
// 		CartItems:           cartItems,
// 		TotalAmount:         totalAmount,
// 		EstimatedTotalPrice: estimatedTotal,
// 		CreatedAt:           time.Now(),
// 		UpdatedAt:           time.Now(),
// 	}

// 	if err := s.Repo.DeleteCartByUserID(userID); err != nil {
// 		log.Printf("Failed to delete old cart: %v", err)
// 	}

// 	if err := s.Repo.CreateCart(cart); err != nil {
// 		log.Printf("Failed to create cart: %v", err)
// 		return err
// 	}

// 	if err := ClearCart(userID); err != nil {
// 		log.Printf("Failed to clear Redis cart: %v", err)
// 	}

// 	log.Printf("Cart committed successfully for user: %s", userID)
// 	return nil
// }

// func (s *CartService) GetCartFromRedis(userID string) (*dto.CartResponse, error) {
// 	items, err := GetCartItems(userID)
// 	if err != nil || len(items) == 0 {
// 		return nil, err
// 	}

// 	var totalAmount float32
// 	var estimatedTotal float32
// 	var cartItemDTOs []dto.CartItemResponse

// 	for _, item := range items {
// 		trash, err := s.Repo.GetTrashCategoryByID(item.TrashCategoryID)
// 		if err != nil {
// 			continue
// 		}

// 		subtotal := float32(trash.EstimatedPrice) * item.Amount
// 		totalAmount += item.Amount
// 		estimatedTotal += subtotal

// 		cartItemDTOs = append(cartItemDTOs, dto.CartItemResponse{
// 			TrashId:                trash.ID,
// 			TrashIcon:              trash.Icon,
// 			TrashName:              trash.Name,
// 			Amount:                 item.Amount,
// 			EstimatedSubTotalPrice: subtotal,
// 		})
// 	}

// 	resp := &dto.CartResponse{
// 		ID:                  "N/A",
// 		UserID:              userID,
// 		TotalAmount:         totalAmount,
// 		EstimatedTotalPrice: estimatedTotal,
// 		CreatedAt:           time.Now().Format(time.RFC3339),
// 		UpdatedAt:           time.Now().Format(time.RFC3339),
// 		CartItems:           cartItemDTOs,
// 	}
// 	return resp, nil
// }

// func (s *CartService) GetCart(userID string) (*dto.CartResponse, error) {

// 	cartRedis, err := s.GetCartFromRedis(userID)
// 	if err == nil && len(cartRedis.CartItems) > 0 {
// 		return cartRedis, nil
// 	}

// 	cartDB, err := s.Repo.GetCartByUserID(userID)
// 	if err != nil {
// 		return nil, err
// 	}

// 	var items []dto.CartItemResponse
// 	for _, item := range cartDB.CartItems {
// 		items = append(items, dto.CartItemResponse{
// 			ItemId:                 item.ID,
// 			TrashId:                item.TrashCategoryID,
// 			TrashIcon:              item.TrashCategory.Icon,
// 			TrashName:              item.TrashCategory.Name,
// 			Amount:                 item.Amount,
// 			EstimatedSubTotalPrice: item.SubTotalEstimatedPrice,
// 		})
// 	}

// 	resp := &dto.CartResponse{
// 		ID:                  cartDB.ID,
// 		UserID:              cartDB.UserID,
// 		TotalAmount:         cartDB.TotalAmount,
// 		EstimatedTotalPrice: cartDB.EstimatedTotalPrice,
// 		CreatedAt:           cartDB.CreatedAt.Format(time.RFC3339),
// 		UpdatedAt:           cartDB.UpdatedAt.Format(time.RFC3339),
// 		CartItems:           items,
// 	}
// 	return resp, nil
// }
