package model

import (
	"time"
)

// Passkey 用户凭证密钥模型
type Passkey struct {
	ID              int64  `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
	UserID          int64  `json:"user_id" gorm:"column:user_id;index"`
	CredentialID    string `json:"credential_id" gorm:"column:credential_id;index"`        // 凭证ID，用于识别特定的passkey
	PublicKey       string `json:"public_key" gorm:"column:public_key"`                    // 公钥，用于验证签名
	AttestationType string `json:"attestation_type" gorm:"column:attestation_type"`        // 证明类型
	AAGUID          string `json:"aaguid" gorm:"column:aaguid"`                            // 认证器标识符
	SignCount       uint32 `json:"sign_count" gorm:"column:sign_count"`                    // 签名计数器，用于防止重放攻击
	Name            string `json:"name" gorm:"column:name"`                                // 凭证名称，用于用户识别不同的设备
	DeviceType      string `json:"device_type" gorm:"column:device_type"`                  // 设备类型
	BackupEligible  bool   `json:"backup_eligible" gorm:"column:backup_eligible"`          // 是否可备份
	BackupState     bool   `json:"backup_state" gorm:"backup_state"`                       // 备份状态
	Transport       string `json:"transport" gorm:"column:transport"`                      // 传输方式 （如usb、nfc、ble等）
	LastUsedAt      int64  `json:"last_used_at" gorm:"column:last_used_at;autoUpdateTime"` // 最后使用时间
	CreatedAt       int64  `json:"created_at,omitempty" gorm:"column:created_at;autoCreateTime"`
	UpdatedAt       int64  `json:"updated_at,omitempty" gorm:"column:updated_at;autoUpdateTime"`

	// 关联用户模型（不存入数据库）
	User User `json:"-" gorm:"foreignKey:UserID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
}

// 创建表结构
func (Passkey) TableName() string {
	return "passkeys"
}

// UpdateSignCount 更新签名计数器和最后使用时间
func (p *Passkey) UpdateSignCount(count uint32) {
	p.SignCount = count
	p.LastUsedAt = time.Now().Unix()
}
