import { Schema, model } from 'mongoose';

// OAuth2客户端应用
const OAuth2ClientSchema = new Schema({
  clientId: { type: String, required: true, unique: true },
  clientSecret: { type: String, required: true },
  name: { type: String, required: true },
  redirectUris: [{ type: String }],
  grants: [{ type: String }],
  scope: [{ type: String }],
  createdAt: { type: Date, default: Date.now },
  linkedUsers: [{
    userId: String,
    username: String,
    email: String
  }]
});

// OAuth2授权码
const OAuth2AuthorizationCodeSchema = new Schema({
  code: { type: String, required: true, unique: true },
  clientId: { type: String, required: true },
  userId: { type: Schema.Types.ObjectId, ref: 'User', required: true },
  scope: [{ type: String }],
  redirectUri: { type: String, required: true },
  expiresAt: { type: Date, required: true },
  createdAt: { type: Date, default: Date.now },
});

// OAuth2访问令牌
const OAuth2AccessTokenSchema = new Schema({
  accessToken: { type: String, required: true, unique: true },
  clientId: { type: String, required: true },
  userId: { type: Schema.Types.ObjectId, ref: 'User', required: true },
  scope: [{ type: String }],
  expiresAt: { type: Date, required: true },
  createdAt: { type: Date, default: Date.now },
});

export const OAuth2Client = model('OAuth2Client', OAuth2ClientSchema);
export const OAuth2AuthorizationCode = model('OAuth2AuthorizationCode', OAuth2AuthorizationCodeSchema);
export const OAuth2AccessToken = model('OAuth2AccessToken', OAuth2AccessTokenSchema); 