import env from '#start/env'
import { defineConfig, services } from '@adonisjs/ally'
import { microsoftService } from '#services/ally/microsoft_driver'

/**
 * Configuration des providers OAuth (Ally).
 *
 * V1 : Google + Microsoft 365 (cf. CLAUDE.md → Auth).
 * Le callback URL pointe vers l'API (/api/v1/auth/{provider}/callback).
 * En prod, le reverse proxy nginx (rubis-web) achemine /api/* vers ce
 * service, donc la même URL fonctionne browser et provider.
 */
const allyConfig = defineConfig({
  google: services.google({
    clientId: env.get('GOOGLE_CLIENT_ID', ''),
    clientSecret: env.get('GOOGLE_CLIENT_SECRET', ''),
    callbackUrl: env.get(
      'GOOGLE_CALLBACK_URL',
      'http://localhost:3333/api/v1/auth/google/callback'
    ),
    // Scopes minimaux : on a juste besoin de l'email + nom + photo (avatar
    // optionnel V2). Pas de Drive/Calendar : on ne touche pas aux données
    // Google de l'utilisateur, on s'en sert juste comme provider d'identité.
    scopes: ['userinfo.email', 'userinfo.profile'],
    prompt: 'select_account',
  }),
  microsoft: microsoftService({
    clientId: env.get('MICROSOFT_CLIENT_ID', ''),
    clientSecret: env.get('MICROSOFT_CLIENT_SECRET', ''),
    callbackUrl: env.get(
      'MICROSOFT_CALLBACK_URL',
      'http://localhost:3333/api/v1/auth/microsoft/callback'
    ),
    // tenant=common : accepte work/school (Microsoft 365) ET comptes personnels
    // (Outlook, Hotmail). Pour limiter à M365 strict, mettre 'organizations'.
    tenant: env.get('MICROSOFT_TENANT', 'common'),
    scopes: ['openid', 'profile', 'email', 'User.Read'],
    prompt: 'select_account',
  }),
})

export default allyConfig

declare module '@adonisjs/ally/types' {
  interface SocialProviders extends InferSocialProviders<typeof allyConfig> {}
}

import type { InferSocialProviders } from '@adonisjs/ally/types'
