import { google } from 'googleapis'
import * as readline from 'readline'
import dotenv from 'dotenv'
import path from 'path'

// Carrega .env do diretório backend
dotenv.config({ path: path.join(__dirname, '../.env') })

const oauth2Client = new google.auth.OAuth2(
  process.env.GOOGLE_MERCHANT_CLIENT_ID,
  process.env.GOOGLE_MERCHANT_CLIENT_SECRET,
  process.env.GOOGLE_MERCHANT_REDIRECT_URI || 'http://localhost:3000/api/merchant/callback'
)

const scopes = ['https://www.googleapis.com/auth/content']

const authUrl = oauth2Client.generateAuthUrl({
  access_type: 'offline',
  scope: scopes,
  prompt: 'consent', // Força a obtenção do refresh token
})

console.log('\n🔐 Autenticação Google Merchant Center\n')
console.log('1. Autorize este app visitando esta URL:')
console.log('\n' + authUrl + '\n')
console.log('2. Após autorizar, você será redirecionado para uma URL como:')
console.log('   http://localhost:3000/api/merchant/callback?code=...\n')
console.log('3. Copie o código que aparece após "code=" na URL\n')

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
})

rl.question('Digite o código da URL de callback: ', async (code) => {
  try {
    const { tokens } = await oauth2Client.getToken(code.trim())
    
    if (!tokens.refresh_token) {
      console.error('\n❌ Erro: Refresh token não recebido!')
      console.log('\nPossíveis causas:')
      console.log('- Você já autorizou este app antes (revogue o acesso e tente novamente)')
      console.log('- O prompt=consent não foi usado')
      console.log('\nSolução:')
      console.log('1. Vá em https://myaccount.google.com/permissions')
      console.log('2. Revogue o acesso para este app')
      console.log('3. Execute este script novamente')
      if (tokens.access_token) {
        console.log('\n✅ Access token recebido, mas refresh token não foi fornecido')
      }
    } else {
      console.log('\n✅ Sucesso! Refresh Token obtido:\n')
      console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')
      console.log(tokens.refresh_token)
      console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n')
      console.log('📝 Adicione ao arquivo backend/.env:\n')
      console.log(`GOOGLE_MERCHANT_REFRESH_TOKEN=${tokens.refresh_token}\n`)
      console.log('💡 Depois, reinicie o servidor backend\n')
    }
  } catch (error: any) {
    console.error('\n❌ Erro ao obter tokens:', error.message)
    if (error.response) {
      console.error('Detalhes:', error.response.data)
    }
  }
  rl.close()
})
