package handlers

import (
	"strconv"
	"strings"

	"github.com/gin-gonic/gin"
)

// isDuplicateErr checks if a database error indicates a unique constraint violation.
func isDuplicateErr(err error) bool {
	if err == nil {
		return false
	}
	msg := err.Error()
	return strings.Contains(msg, "UNIQUE constraint failed") ||
		strings.Contains(msg, "duplicate key value violates unique constraint")
}

// getUserID extracts the authenticated user ID from the gin context.
// Set by the Auth middleware.
func getUserID(c *gin.Context) string {
	return c.GetString("user_id")
}

// parsePagination extracts page, perPage, and offset from query params.
// Defaults: page=1, per_page=50, max per_page=200.
func parsePagination(c *gin.Context) (page, perPage, offset int) {
	page, _ = strconv.Atoi(c.DefaultQuery("page", "1"))
	if page < 1 {
		page = 1
	}
	perPage, _ = strconv.Atoi(c.DefaultQuery("per_page", "50"))
	if perPage < 1 {
		perPage = 50
	}
	if perPage > 200 {
		perPage = 200
	}
	offset = (page - 1) * perPage
	return
}
