package fakers

import (
	"github.com/bxcodec/faker/v3"
	"github.com/google/uuid"
	"github.com/shopspring/decimal"
	"gorm.io/gorm"
	"log"
	"math"
	"math/rand"
	"moretcgshop/app/models"
	"time"
)

func ProductFaker(db *gorm.DB) *models.Product {
	user := UserFaker(db)
	err := db.Create(&user).Error

	if err != nil {
		log.Fatal(err)
	}

	name := faker.Name()
	return &models.Product{
		ID: uuid.New().String(),

		Name:  name,
		Price: decimal.NewFromFloat(fakePrice()),

		ShortDescription: faker.Paragraph(),
		Description:      faker.Paragraph(),

		CreatedAt: time.Time{},
		UpdatedAt: time.Time{},
	}
}

func fakePrice() float64 {
	return precision(rand.Float64()*math.Pow10(rand.Intn(8)), rand.Intn(2)+1)
}

// precision | a helper function to set precision of price
func precision(val float64, pre int) float64 {
	div := math.Pow10(pre)
	return float64(int64(val*div)) / div
}
