import { uiLog } from './logger.js'
import { hideBusyUi, showBusyUi } from './modal.js'
import { toastError, toastSuccess, toastWarning } from './toast.js'

export async function loadCredentialStatus(): Promise<void> {
  try {
    if (typeof homebridge.getPluginConfig !== 'function') {
      uiLog.error('Homebridge UI API not available')
      return
    }
    const configArr = await homebridge.getPluginConfig()
    const config = Array.isArray(configArr) && configArr.length > 0 ? configArr[0] : {}
    const token = config.openApiToken || ''
    const secret = config.openApiSecret || ''

    const tokenStatus = document.getElementById('tokenStatus')
    const secretStatus = document.getElementById('secretStatus')
    if (!tokenStatus || !secretStatus) {
      return
    }
    if (token) {
      tokenStatus.textContent = `✓ Configured (${token.length} characters)`
      tokenStatus.classList.add('ok')
    } else {
      tokenStatus.textContent = 'Not configured'
      tokenStatus.classList.remove('ok')
    }
    if (secret) {
      secretStatus.textContent = `✓ Configured (${secret.length} characters)`
      secretStatus.classList.add('ok')
    } else {
      secretStatus.textContent = 'Not configured'
      secretStatus.classList.remove('ok')
    }
  } catch (e) {
    uiLog.error('Error loading credentials:', e)
  }
}

export async function saveCredentials(): Promise<void> {
  const token = (document.getElementById('token') as HTMLInputElement)?.value
  const secret = (document.getElementById('secret') as HTMLInputElement)?.value
  const saveStatus = document.getElementById('saveStatus')
  const saveBtn = document.getElementById('saveBtn') as HTMLButtonElement

  if (!saveStatus || !saveBtn) {
    return
  }

  if (!token || !secret) {
    saveStatus.textContent = 'Please enter both token and secret'
    saveStatus.classList.add('error')
    toastWarning('Please enter both token and secret')
    return
  }

  try {
    showBusyUi()
    saveBtn.disabled = true
    saveBtn.textContent = 'Saving...'
    uiLog.info('Saving credentials...')

    if (typeof homebridge.getPluginConfig !== 'function' || typeof homebridge.updatePluginConfig !== 'function') {
      throw new TypeError('Homebridge UI API not available')
    }
    const configArr = await homebridge.getPluginConfig()
    if (!Array.isArray(configArr) || configArr.length === 0) {
      throw new Error('No plugin config found')
    }
    const config = configArr[0]
    config.openApiToken = token
    config.openApiSecret = secret
    await homebridge.updatePluginConfig([config])
    if (typeof homebridge.savePluginConfig === 'function') {
      await homebridge.savePluginConfig()
    }

    saveStatus.textContent = `✓ Credentials saved successfully`
    saveStatus.classList.remove('error')
    saveStatus.classList.add('success-msg')
    toastSuccess('Credentials saved successfully')

    // Clear inputs after successful save
    ;(document.getElementById('token') as HTMLInputElement).value = ''
    ;(document.getElementById('secret') as HTMLInputElement).value = ''

    // Reload status to verify save
    setTimeout(loadCredentialStatus, 500)

    // Clear status message
    setTimeout(() => {
      saveStatus.textContent = ''
      saveStatus.classList.remove('success-msg')
    }, 3000)
  } catch (e) {
    uiLog.error('Save error:', e)
    saveStatus.textContent = `Error: ${e instanceof Error ? e.message : 'Failed to save'}`
    saveStatus.classList.add('error')
    toastError(e instanceof Error ? e.message : 'Failed to save credentials')
  } finally {
    hideBusyUi()
    saveBtn.disabled = false
    saveBtn.textContent = 'Save Credentials'
  }
}
