package cart

import (
	"context"
	"fmt"

	"gorm.io/gorm"
)

type Summary struct {
	ID         int64
	TotalItems int64
}

type Service struct {
	db     *gorm.DB
	prefix string
}

func NewService(db *gorm.DB, prefix string) *Service {
	return &Service{db: db, prefix: prefix}
}

func (s *Service) SummaryByID(ctx context.Context, cartID int64) (*Summary, error) {
	var summary Summary
	query := fmt.Sprintf("SELECT id_cart AS id, COALESCE(SUM(quantity), 0) AS total_items FROM %scart_product WHERE id_cart = ? GROUP BY id_cart", s.prefix)
	result := s.db.WithContext(ctx).Raw(query, cartID).Scan(&summary)
	if result.Error != nil {
		return nil, result.Error
	}
	if result.RowsAffected == 0 {
		return &Summary{ID: cartID}, nil
	}
	return &summary, nil
}
