package main

import (
	"fmt"
	"log"

	"golang.org/x/crypto/bcrypt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// UserAccount 用户账号模型
type UserAccount struct {
	ID           uint   `gorm:"primaryKey"`
	Username     string `gorm:"type:varchar(64);uniqueIndex"`
	PasswordHash string `gorm:"type:varchar(255)"`
	Name         string `gorm:"type:varchar(64)"`
	Phone        string `gorm:"type:varchar(20);uniqueIndex"`
	UserType     string `gorm:"type:varchar(16)"`
	Status       int    `gorm:"default:1"`
	LastLoginAt  *string
	LastLoginIP  string
	CreatedAt    string
	UpdatedAt    string
}

func main() {
	fmt.Println("AI近视防控系统 - 管理员账号创建工具")
	
	// 数据库连接信息 - 从环境变量或配置文件读取
	// 使用与主应用相同的数据库连接信息
	dsn := "root:MyopiaTest2026!@tcp(localhost:3306)/ai_myopia_db?charset=utf8mb4&parseTime=True&loc=Local"
	
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatal("连接数据库失败:", err)
	}

	// 加密管理员密码
	adminPassword := "Admin123!@#" // 强密码，包含大小写字母、数字、特殊字符
	hashedPassword, err := bcrypt.GenerateFromPassword([]byte(adminPassword), bcrypt.DefaultCost)
	if err != nil {
		log.Fatal("密码加密失败:", err)
	}

	// 创建管理员账号
	adminAccount := UserAccount{
		Username:     "admin",
		PasswordHash: string(hashedPassword),
		Name:         "系统管理员",
		Phone:        "13800138000",
		UserType:     "admin",
		Status:       1,
	}

	result := db.Table("user_accounts").Where("username = ?", "admin").First(&UserAccount{})
	if result.Error != nil {
		// 管理员账号不存在，创建新账号
		result = db.Table("user_accounts").Create(&adminAccount)
		if result.Error != nil {
			log.Fatal("创建管理员账号失败:", result.Error)
		}
		fmt.Println("✅ 管理员账号创建成功")
	} else {
		// 管理员账号已存在，更新密码
		result = db.Table("user_accounts").
			Where("username = ?", "admin").
			Updates(map[string]interface{}{
				"password_hash": string(hashedPassword),
				"name":          "系统管理员",
				"phone":         "13800138000",
				"user_type":     "admin",
				"status":        1,
			})
		if result.Error != nil {
			log.Fatal("更新管理员账号失败:", result.Error)
		}
		fmt.Println("✅ 管理员账号更新成功")
	}

	fmt.Println("\n📋 测试账号信息:")
	fmt.Println("用户名: admin")
	fmt.Println("密码: Admin123!@#")
	fmt.Println("角色: admin")
	fmt.Println("手机号: 13800138000")
	
	fmt.Println("\n🔧 功能测试:")
	fmt.Println("- 用户认证功能: 待验证")
	fmt.Println("- 学生管理功能: 待验证") 
	fmt.Println("- 检测功能: 待验证")
	fmt.Println("- 预警功能: 待验证")
	
	fmt.Println("\n💡 提示: 可使用此账号登录系统进行功能测试")
}