package sqlite

import (
	"fmt"

	"github.com/steveyegge/beads/internal/types"
)

// validatePriority validates a priority value
func validatePriority(value interface{}) error {
	if priority, ok := value.(int); ok {
		if priority < 0 || priority > 4 {
			return fmt.Errorf("priority must be between 0 and 4 (got %d)", priority)
		}
	}
	return nil
}

// validateStatus validates a status value
func validateStatus(value interface{}) error {
	if status, ok := value.(string); ok {
		if !types.Status(status).IsValid() {
			return fmt.Errorf("invalid status: %s", status)
		}
	}
	return nil
}

// validateIssueType validates an issue type value
func validateIssueType(value interface{}) error {
	if issueType, ok := value.(string); ok {
		if !types.IssueType(issueType).IsValid() {
			return fmt.Errorf("invalid issue type: %s", issueType)
		}
	}
	return nil
}

// validateTitle validates a title value
func validateTitle(value interface{}) error {
	if title, ok := value.(string); ok {
		if len(title) == 0 || len(title) > 500 {
			return fmt.Errorf("title must be 1-500 characters")
		}
	}
	return nil
}

// validateEstimatedMinutes validates an estimated_minutes value
func validateEstimatedMinutes(value interface{}) error {
	if mins, ok := value.(int); ok {
		if mins < 0 {
			return fmt.Errorf("estimated_minutes cannot be negative")
		}
	}
	return nil
}

// fieldValidators maps field names to their validation functions
var fieldValidators = map[string]func(interface{}) error{
	"priority":          validatePriority,
	"status":            validateStatus,
	"issue_type":        validateIssueType,
	"title":             validateTitle,
	"estimated_minutes": validateEstimatedMinutes,
}

// validateFieldUpdate validates a field update value
func validateFieldUpdate(key string, value interface{}) error {
	if validator, ok := fieldValidators[key]; ok {
		return validator(value)
	}
	return nil
}
