/* eslint-disable */
// HAIQ — Contact modal (opens on any CTA click)

const MODAL_COPY = {
  ua: {
    eyebrow:      'Консультація',
    title:        "Зв'яжіться з нами",
    desc:         "Заповніть форму — ми відповімо протягом 24 годин і обговоримо ваш проєкт.",
    labelName:    "Ім'я *",
    labelPhone:   'Телефон *',
    labelEmail:   'Email *',
    labelMsg:     'Деталі запиту',
    placeName:    "Ваше ім'я",
    placePhone:   '+380 XX XXX XX XX',
    placeEmail:   'your@email.com',
    placeMsg:     'Розкажіть про ваш проєкт або задачу...',
    submit:       'Відправити заявку',
    sending:      'Відправляємо...',
    errMsg:       'Помилка. Спробуйте ще раз або напишіть нам у Telegram.',
    errName:      "Введіть ваше ім'я",
    errPhone:     'Введіть коректний номер (+380XXXXXXXXX або 0XXXXXXXXX)',
    errEmail:     'Введіть коректний email',
    successTitle: 'Заявку отримано!',
    successDesc:  "Ми зв'яжемося з вами протягом 24 годин.",
    close:        'Закрити',
  },
  en: {
    eyebrow:      'Consultation',
    title:        'Get in touch',
    desc:         "Fill in the form — we'll reply within 24 hours and discuss your project.",
    labelName:    'Name *',
    labelPhone:   'Phone *',
    labelEmail:   'Email *',
    labelMsg:     'Request details',
    placeName:    'Your name',
    placePhone:   '+380 XX XXX XX XX',
    placeEmail:   'your@email.com',
    placeMsg:     'Tell us about your project or task...',
    submit:       'Send request',
    sending:      'Sending...',
    errMsg:       'Error. Please try again or message us on Telegram.',
    errName:      'Please enter your name',
    errPhone:     'Enter a valid number (+380XXXXXXXXX or 0XXXXXXXXX)',
    errEmail:     'Enter a valid email address',
    successTitle: 'Request received!',
    successDesc:  "We'll get back to you within 24 hours.",
    close:        'Close',
  },
};

function validatePhone(v) {
  // Accepts: +380XXXXXXXXX, 380XXXXXXXXX, 0XXXXXXXXX (9 digits after prefix)
  return /^(\+?380|0)\d{9}$/.test(v.replace(/[\s\-()]/g, ''));
}
function validateEmail(v) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(v.trim());
}

function ContactModal({lang}) {
  const langRef = React.useRef(lang);
  React.useEffect(() => { langRef.current = lang; }, [lang]);

  const [open,    setOpen]    = React.useState(false);
  const [source,  setSource]  = React.useState('');
  const [name,    setName]    = React.useState('');
  const [phone,   setPhone]   = React.useState('');
  const [email,   setEmail]   = React.useState('');
  const [message, setMessage] = React.useState('');
  const [status,  setStatus]  = React.useState('idle'); // idle | loading | success | error
  const [errors,  setErrors]  = React.useState({});

  React.useEffect(() => {
    window.openContactModal = (src) => {
      setSource(src || '');
      setName(''); setPhone(''); setEmail(''); setMessage('');
      setStatus('idle');
      setErrors({});
      setOpen(true);
    };
  }, []);

  // Close on Escape
  React.useEffect(() => {
    if (!open) return;
    const handler = (e) => { if (e.key === 'Escape') setOpen(false); };
    document.addEventListener('keydown', handler);
    document.body.style.overflow = 'hidden';
    return () => {
      document.removeEventListener('keydown', handler);
      document.body.style.overflow = '';
    };
  }, [open]);

  if (!open) return null;

  const c = MODAL_COPY[langRef.current] || MODAL_COPY.ua;

  function validateField(field, value) {
    const c2 = MODAL_COPY[langRef.current] || MODAL_COPY.ua;
    if (field === 'name'  && !value.trim())          return c2.errName;
    if (field === 'phone' && !validatePhone(value))  return c2.errPhone;
    if (field === 'email' && !validateEmail(value))  return c2.errEmail;
    return '';
  }

  function blurField(field, value) {
    const err = validateField(field, value);
    setErrors(prev => ({...prev, [field]: err}));
  }

  async function submit(e) {
    e.preventDefault();
    const nameErr  = validateField('name',  name);
    const phoneErr = validateField('phone', phone);
    const emailErr = validateField('email', email);
    if (nameErr || phoneErr || emailErr) {
      setErrors({ name: nameErr, phone: phoneErr, email: emailErr });
      return;
    }
    setStatus('loading');
    try {
      const res = await fetch('/api/leads', {
        method:  'POST',
        headers: { 'Content-Type': 'application/json' },
        body:    JSON.stringify({ name, phone, email, message, source }),
      });
      if (!res.ok) {
        const body = await res.json().catch(() => ({}));
        console.error('[ContactModal] POST /api/leads failed:', res.status, body);
        throw new Error(body.error || res.status);
      }
      setStatus('success');
    } catch (err) {
      console.error('[ContactModal] submit error:', err);
      setStatus('error');
    }
  }

  const inp = {
    width: '100%', boxSizing: 'border-box',
    background: 'rgba(255,255,255,0.04)',
    border: '1px solid rgba(255,255,255,0.1)',
    borderRadius: 10, padding: '12px 14px',
    fontFamily: 'var(--font-sans)', fontSize: 14, color: '#fff',
    outline: 'none', transition: 'border-color 0.2s ease',
  };

  return (
    <div
      onClick={e => { if (e.target === e.currentTarget) setOpen(false); }}
      style={{
        position: 'fixed', inset: 0, zIndex: 2000,
        background: 'rgba(0,0,0,0.75)', backdropFilter: 'blur(10px)',
        display: 'flex', alignItems: 'center', justifyContent: 'center',
        padding: 20,
        animation: 'haiqModalIn 0.2s ease',
      }}
    >
      <div style={{
        background: '#18181B', border: '1px solid #3F3F46',
        borderRadius: 20, padding: '40px 36px',
        maxWidth: 480, width: '100%', position: 'relative',
        boxShadow: '0 24px 80px rgba(0,0,0,0.6)',
      }}>
        {/* Close button */}
        <button onClick={() => setOpen(false)} style={{
          position: 'absolute', top: 14, right: 14,
          background: 'none', border: 'none', cursor: 'pointer',
          color: 'rgba(255,255,255,0.35)', fontSize: 18, lineHeight: 1,
          padding: '6px 10px', borderRadius: 8,
          transition: 'color 0.2s ease',
        }}
          onMouseEnter={e => e.currentTarget.style.color = '#fff'}
          onMouseLeave={e => e.currentTarget.style.color = 'rgba(255,255,255,0.35)'}
        >✕</button>

        {status === 'success' ? (
          <div style={{textAlign: 'center', padding: '12px 0 8px'}}>
            <div style={{
              width: 56, height: 56, borderRadius: '50%', margin: '0 auto 20px',
              background: 'rgba(129,140,248,0.12)', border: '1px solid #818CF8',
              display: 'flex', alignItems: 'center', justifyContent: 'center',
              fontSize: 24,
            }}>✓</div>
            <h3 style={{
              fontFamily: 'var(--font-sans)', fontWeight: 700, fontSize: 22,
              color: '#fff', margin: '0 0 12px', letterSpacing: '-0.02em',
            }}>{c.successTitle}</h3>
            <p style={{
              fontFamily: 'var(--font-sans)', fontSize: 15,
              color: '#A1A1AA', margin: '0 0 28px', lineHeight: 1.6,
            }}>{c.successDesc}</p>
            <button onClick={() => setOpen(false)} className="btn-pill btn-pill--filled">
              {c.close}
            </button>
          </div>
        ) : (
          <>
            <div style={{
              fontFamily: 'var(--font-mono)', fontSize: 11, fontWeight: 500,
              color: '#818CF8', letterSpacing: '0.08em', textTransform: 'uppercase',
              marginBottom: 10,
            }}>{c.eyebrow}</div>
            <h2 style={{
              fontFamily: 'var(--font-sans)', fontWeight: 700, fontSize: 24,
              color: '#fff', margin: '0 0 8px', letterSpacing: '-0.02em',
            }}>{c.title}</h2>
            <p style={{
              fontFamily: 'var(--font-sans)', fontSize: 14, color: '#A1A1AA',
              margin: '0 0 28px', lineHeight: 1.6,
            }}>{c.desc}</p>

            <form onSubmit={submit} style={{display: 'flex', flexDirection: 'column', gap: 14}}>
              <div>
                <label style={{fontFamily:'var(--font-sans)', fontSize:12, color:'rgba(255,255,255,0.45)', display:'block', marginBottom:6}}>{c.labelName}</label>
                <input value={name} onChange={e => { setName(e.target.value); if (errors.name) setErrors(prev => ({...prev, name: ''})); }}
                  placeholder={c.placeName} style={{...inp, borderColor: errors.name ? '#F87171' : 'rgba(255,255,255,0.1)'}}
                  onFocus={e => e.target.style.borderColor = errors.name ? '#F87171' : 'rgba(129,140,248,0.6)'}
                  onBlur={e => { blurField('name', name); if (!errors.name) e.target.style.borderColor = 'rgba(255,255,255,0.1)'; }}
                />
                {errors.name && <p style={{fontFamily:'var(--font-sans)', fontSize:12, color:'#F87171', margin:'4px 0 0'}}>{errors.name}</p>}
              </div>
              <div>
                <label style={{fontFamily:'var(--font-sans)', fontSize:12, color:'rgba(255,255,255,0.45)', display:'block', marginBottom:6}}>{c.labelPhone}</label>
                <input value={phone} onChange={e => { setPhone(e.target.value); if (errors.phone) setErrors(prev => ({...prev, phone: ''})); }}
                  placeholder={c.placePhone} type="tel" style={{...inp, borderColor: errors.phone ? '#F87171' : 'rgba(255,255,255,0.1)'}}
                  onFocus={e => e.target.style.borderColor = errors.phone ? '#F87171' : 'rgba(129,140,248,0.6)'}
                  onBlur={e => { blurField('phone', phone); if (!errors.phone) e.target.style.borderColor = 'rgba(255,255,255,0.1)'; }}
                />
                {errors.phone && <p style={{fontFamily:'var(--font-sans)', fontSize:12, color:'#F87171', margin:'4px 0 0'}}>{errors.phone}</p>}
              </div>
              <div>
                <label style={{fontFamily:'var(--font-sans)', fontSize:12, color:'rgba(255,255,255,0.45)', display:'block', marginBottom:6}}>{c.labelEmail}</label>
                <input required value={email} onChange={e => { setEmail(e.target.value); if (errors.email) setErrors(prev => ({...prev, email: ''})); }}
                  placeholder={c.placeEmail} type="email" style={{...inp, borderColor: errors.email ? '#F87171' : 'rgba(255,255,255,0.1)'}}
                  onFocus={e => e.target.style.borderColor = errors.email ? '#F87171' : 'rgba(129,140,248,0.6)'}
                  onBlur={e => { blurField('email', email); if (!errors.email) e.target.style.borderColor = 'rgba(255,255,255,0.1)'; }}
                />
                {errors.email && <p style={{fontFamily:'var(--font-sans)', fontSize:12, color:'#F87171', margin:'4px 0 0'}}>{errors.email}</p>}
              </div>
              <div>
                <label style={{fontFamily:'var(--font-sans)', fontSize:12, color:'rgba(255,255,255,0.45)', display:'block', marginBottom:6}}>{c.labelMsg}</label>
                <textarea value={message} onChange={e => setMessage(e.target.value)}
                  rows={4} placeholder={c.placeMsg}
                  style={{...inp, resize: 'vertical', lineHeight: 1.6}}
                  onFocus={e => e.target.style.borderColor = 'rgba(129,140,248,0.6)'}
                  onBlur={e => e.target.style.borderColor = 'rgba(255,255,255,0.1)'}
                />
              </div>

              {status === 'error' && (
                <p style={{fontFamily:'var(--font-sans)', fontSize:13, color:'#F87171', margin:0}}>{c.errMsg}</p>
              )}

              <button type="submit" disabled={status === 'loading'} className="btn-pill btn-pill--filled"
                style={{justifyContent:'center', marginTop:4, opacity: status==='loading' ? 0.7 : 1, cursor: status==='loading' ? 'default' : 'pointer'}}
              >
                {status === 'loading' ? c.sending : c.submit}
              </button>
            </form>
          </>
        )}
      </div>

      <style>{`
        @keyframes haiqModalIn {
          from { opacity:0; transform:scale(0.97); }
          to   { opacity:1; transform:scale(1); }
        }
      `}</style>
    </div>
  );
}

window.openContactModal = function() {};
Object.assign(window, {ContactModal});
