package request

import (
	"jaecoo-be/app/database/entity"
	"jaecoo-be/utils/paginator"
	"strconv"
)

type GalleryFilesQueryRequest struct {
	GalleryID  *uint                 `json:"gallery_id"`
	Title      *string               `json:"title"`
	Pagination *paginator.Pagination `json:"pagination"`
}

type GalleryFilesQueryRequestContext struct {
	GalleryID string `json:"gallery_id"`
	Title      string `json:"title"`
}

func (req GalleryFilesQueryRequestContext) ToParamRequest() GalleryFilesQueryRequest {
	var request GalleryFilesQueryRequest

	if galleryIDStr := req.GalleryID; galleryIDStr != "" {
		galleryID, err := strconv.Atoi(galleryIDStr)
		if err == nil {
			galleryIDUint := uint(galleryID)
			request.GalleryID = &galleryIDUint
		}
	}
	if title := req.Title; title != "" {
		request.Title = &title
	}

	return request
}

type GalleryFilesCreateRequest struct {
	GalleryID uint    `json:"gallery_id" validate:"required"`
	Title     *string `json:"title"`
	ImagePath *string `json:"image_path"`
}

func (req GalleryFilesCreateRequest) ToEntity() *entity.GalleryFiles {
	return &entity.GalleryFiles{
		GalleryID: req.GalleryID,
		Title:     req.Title,
		ImagePath: req.ImagePath,
	}
}

type GalleryFilesUpdateRequest struct {
	GalleryID *uint   `json:"gallery_id"`
	Title     *string `json:"title"`
	ImagePath *string `json:"image_path"`
	IsActive  *bool   `json:"is_active"`
}

func (req GalleryFilesUpdateRequest) ToEntity() *entity.GalleryFiles {
	return &entity.GalleryFiles{
		GalleryID: getUintValue(req.GalleryID),
		Title:     req.Title,
		ImagePath: req.ImagePath,
		IsActive:  req.IsActive,
	}
}

func getUintValue(u *uint) uint {
	if u == nil {
		return 0
	}
	return *u
}

