package domain

import (
	"testing"
	"time"
)

// TestUserModel 测试User模型基本属性
func TestUserModel(t *testing.T) {
	u := &User{
		Username:  "testuser",
		Email:     StrPtr("test@example.com"),
		Phone:     StrPtr("13800138000"),
		Password:  "hashedpassword",
		Status:    UserStatusActive,
		Gender:    GenderMale,
		CreatedAt: time.Now(),
	}
	if u.Username != "testuser" {
		t.Errorf("Username = %v, want testuser", u.Username)
	}
	if u.Status != UserStatusActive {
		t.Errorf("Status = %v, want %v", u.Status, UserStatusActive)
	}
}

// TestUserTableName 测试User表名
func TestUserTableName(t *testing.T) {
	u := User{}
	if u.TableName() != "users" {
		t.Errorf("TableName() = %v, want users", u.TableName())
	}
}

// TestUserStatusConstants 测试用户状态常量值
func TestUserStatusConstants(t *testing.T) {
	cases := []struct {
		status UserStatus
		value  int
	}{
		{UserStatusInactive, 0},
		{UserStatusActive, 1},
		{UserStatusLocked, 2},
		{UserStatusDisabled, 3},
	}
	for _, c := range cases {
		if int(c.status) != c.value {
			t.Errorf("UserStatus = %d, want %d", c.status, c.value)
		}
	}
}

// TestGenderConstants 测试性别常量
func TestGenderConstants(t *testing.T) {
	if int(GenderUnknown) != 0 {
		t.Errorf("GenderUnknown = %d, want 0", GenderUnknown)
	}
	if int(GenderMale) != 1 {
		t.Errorf("GenderMale = %d, want 1", GenderMale)
	}
	if int(GenderFemale) != 2 {
		t.Errorf("GenderFemale = %d, want 2", GenderFemale)
	}
}

// TestUserActiveCheck 测试用户激活状态检查
func TestUserActiveCheck(t *testing.T) {
	active := &User{Status: UserStatusActive}
	inactive := &User{Status: UserStatusInactive}
	locked := &User{Status: UserStatusLocked}
	disabled := &User{Status: UserStatusDisabled}

	if active.Status != UserStatusActive {
		t.Error("active用户应为Active状态")
	}
	if inactive.Status == UserStatusActive {
		t.Error("inactive用户不应为Active状态")
	}
	_ = locked
	_ = disabled
}
