'use client'

import { useEffect, useRef, useState } from 'react'
import { useTranslations } from 'next-intl'
import { Link } from '@/i18n/navigation'

/** Cliente genérico que confirma un hash contra un endpoint (POST) al abrir la página. */
export function ConfirmClient({
  hash,
  endpoint,
  namespace,
  showLogin = false,
}: {
  hash: string
  endpoint: string
  namespace: string
  showLogin?: boolean
}) {
  const t = useTranslations(namespace)
  // Sin hash el error se sabe YA, al renderizar: se deriva del prop en vez de
  // ponerlo con setState dentro del efecto (eso encadena un render de más).
  const [state, setState] = useState<'loading' | 'ok' | 'error'>(hash ? 'loading' : 'error')
  const ran = useRef(false)

  useEffect(() => {
    if (!hash || ran.current) return
    ran.current = true
    fetch(endpoint, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ hash }),
    })
      .then((r) => r.json())
      .then((d: { success?: boolean }) => setState(d.success ? 'ok' : 'error'))
      .catch(() => setState('error'))
  }, [hash, endpoint])

  return (
    <div className="centered">
      {state === 'loading' && <p>{t('activating')}</p>}
      {state === 'ok' && (
        <>
          <span className="ok-form-response">{t('success')}</span>
          {showLogin && (
            <p style={{ marginTop: 16 }}>
              <Link href="/log-in">{t('goLogin')}</Link>
            </p>
          )}
        </>
      )}
      {state === 'error' && <span className="red-form-response">{t('error')}</span>}
    </div>
  )
}
