//
// Copyright (C) 2024 veypi <i@veypi.com>
// 2025-03-04 16:08:06
// Distributed under terms of the MIT license.
//

package models

import (
	"github.com/veypi/vigo"
)

// OAuthProvider 动态 OAuth 提供商配置
type OAuthProvider struct {
	vigo.Model
	Code    string `gorm:"uniqueIndex;size:50;not null" json:"code"` // 唯一标识: google/github/feishu/...
	Name    string `gorm:"size:50" json:"name"`                      // 显示名称
	Icon    string `gorm:"size:100" json:"icon"`                     // 图标
	Enabled bool   `json:"enabled"`                                  // 是否启用
	SortOrder int  `json:"sort_order" gorm:"default:0"`              // 排序权重

	// OAuth 配置
	ClientID     string   `json:"client_id" gorm:"size:200"`
	ClientSecret string   `json:"client_secret" gorm:"size:200"` // 建议加密存储
	AuthURL      string   `json:"auth_url" gorm:"size:500"`
	TokenURL     string   `json:"token_url" gorm:"size:500"`
	UserInfoURL  string   `json:"user_info_url" gorm:"size:500"`
	Scopes       []string `json:"scopes" gorm:"serializer:json"`
	RedirectURI  string   `json:"redirect_uri" gorm:"size:500"` // 为空则使用默认 /auth/callback/{code}

	// 用户信息字段映射（JSON Path）
	UserIDPath     string `json:"user_id_path" gorm:"size:100;default:'id'"`
	UserNamePath   string `json:"user_name_path" gorm:"size:100;default:'name'"`
	UserEmailPath  string `json:"user_email_path" gorm:"size:100;default:'email'"`
	UserAvatarPath string `json:"user_avatar_path" gorm:"size:100"`

	// 特殊平台配置
	ExtraConfig map[string]string `json:"extra_config" gorm:"serializer:json"` // 如: {"appid_param": "appid"}

	// 是否内置（内置的不可删除，只能禁用）
	IsBuiltIn bool `json:"is_built_in" gorm:"default:false"`
}

// OAuthProviderExtra 常用特殊配置键
const (
	OAuthExtraAppIDParam     = "appid_param"     // 微信: appid 参数名不同
	OAuthExtraUsePostToken   = "use_post_token"  // 是否 POST 获取 token
	OAuthExtraTokenInBody    = "token_in_body"   // token 是否在 body 中返回
	OAuthExtraStateParam     = "state_param"     // 自定义 state 参数名
)
