package service

import (
	"errors"
	"testing"

	"gorm.io/gorm"
)

// =============================================================================
// Auth Runtime Helper Functions Tests
// =============================================================================

func TestIsUserNotFoundError(t *testing.T) {
	tests := []struct {
		name     string
		err      error
		expected bool
	}{
		{
			name:     "nil error",
			err:      nil,
			expected: false,
		},
		{
			name:     "gorm record not found",
			err:      gorm.ErrRecordNotFound,
			expected: true,
		},
		{
			name:     "wrapped gorm record not found",
			err:      errors.Join(gorm.ErrRecordNotFound, errors.New("additional context")),
			expected: true,
		},
		{
			name:     "other error",
			err:      errors.New("some other error"),
			expected: false,
		},
		{
			name:     "generic error",
			err:      errors.New("something went wrong"),
			expected: false,
		},
		{
			name:     "error containing user not found",
			err:      errors.New("user not found"),
			expected: true, // contains "user not found" in lowercase
		},
		{
			name:     "error containing record not found",
			err:      errors.New("record not found"),
			expected: true, // contains "record not found"
		},
		{
			name:     "error containing not found",
			err:      errors.New("entity not found"),
			expected: true, // contains "not found"
		},
		{
			name:     "error containing 用户不存在",
			err:      errors.New("用户不存在"),
			expected: true, // contains Chinese "用户不存在"
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			result := isUserNotFoundError(tt.err)
			if result != tt.expected {
				t.Errorf("isUserNotFoundError(%v) = %v, want %v", tt.err, result, tt.expected)
			}
		})
	}
}
