package main

import (
	"fmt"

	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

//type User struct {
//	ID     uint   `gorm:"primaryKey"`
//	Name   string `gorm:"size:100"`
//	Orders []Order
//}
//
//type Order struct {
//	ID      uint `gorm:"primaryKey"`
//	UserID  uint
//	Product string `gorm:"size:100"`
//	Amount  int
//}

func main() {
	db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
	db.AutoMigrate(&User{}, &Order{})

	//user := User{Name: "Alice"}
	//db.Create(&user)

	//查询用户根据名称
	var user User
	db.Where("name = ?", "Alice").First(&user)

	//order1 := Order{Product: "Laptop"}
	//order2 := Order{Product: "Mouse"}
	//order3 := Order{Product: "Keyboard"}

	// 1. Append - 添加关联
	//db.Model(&user).Association("Orders").Append(&order1, &order2)
	//fmt.Println("Orders appended")

	// 2. Count - 统计关联数量
	//count := db.Model(&user).Association("Orders").Count()
	//fmt.Printf("Order count: %d\n", count)

	// 4. Replace - 替换所有关联
	//db.Model(&user).Association("Orders").Replace(&order3)

	//查询订单 Keyboard
	var order3 Order
	db.Where("product = ?", "Keyboard").First(&order3)

	// 5. Delete - 删除关联（不删除记录本身）
	//db.Model(&user).Association("Orders").Delete(&order3)
	//fmt.Println("Association deleted")

	//fmt.Println("Orders replaced with Keyboard")

	// 6. Clear - 清空所有关联
	//db.Model(&user).Association("Orders").Append(&order3)
	db.Model(&user).Association("Orders").Clear()
	fmt.Println("All associations cleared")

	// 3. Find - 查找关联
	var orders []Order
	db.Model(&user).Association("Orders").Find(&orders)
	fmt.Println("Orders found:")
	for _, o := range orders {
		fmt.Printf("  - %s\n", o.Product)
	}
}
