// ================================================================
// Home screen — Sai Krishna Durisala Portfolio
// ================================================================

const { AGENTS, SUGGESTIONS, HOME_ACTIVITY, TIMELINE } = window.LUMEN_DATA;

// Typewriter placeholder — cycles through suggestion phrases
const useTypingPlaceholder = (texts) => {
  const [display, setDisplay] = React.useState('');

  React.useEffect(() => {
    const s = { textIdx: 0, charIdx: 0, phase: 'typing' };
    let timerId;

    const tick = () => {
      const text = texts[s.textIdx];
      let delay;

      if (s.phase === 'typing') {
        s.charIdx++;
        setDisplay(text.slice(0, s.charIdx));
        if (s.charIdx >= text.length) {
          s.phase = 'pausing';
          delay = 1800;
        } else {
          delay = 52 + Math.random() * 38; // natural variation
        }
      } else if (s.phase === 'pausing') {
        s.phase = 'deleting';
        delay = 40;
      } else if (s.phase === 'deleting') {
        if (s.charIdx > 0) {
          s.charIdx--;
          setDisplay(text.slice(0, s.charIdx));
          delay = 26;
        } else {
          s.textIdx = (s.textIdx + 1) % texts.length;
          s.phase = 'typing';
          delay = 480;
        }
      }

      timerId = setTimeout(tick, delay);
    };

    timerId = setTimeout(tick, 1000); // start after 1s
    return () => clearTimeout(timerId);
  }, []);

  return display;
};

// Scroll-triggered animation hook — observes [data-animate] elements
const useScrollAnimate = () => {
  React.useEffect(() => {
    const els = document.querySelectorAll('[data-animate]');
    if (!els.length) return;

    const observer = new IntersectionObserver(
      (entries) => {
        entries.forEach(entry => {
          if (entry.isIntersecting) {
            entry.target.classList.add('is-visible');
            observer.unobserve(entry.target); // animate once
          }
        });
      },
      { threshold: 0.12, rootMargin: '0px 0px -40px 0px' }
    );

    els.forEach(el => {
      const delay = el.dataset.delay;
      if (delay) el.style.transitionDelay = `${delay}ms`;
      observer.observe(el);
    });
    return () => observer.disconnect();
  }, []);
};

const HomeScreen = ({ onSendPrompt, agents }) => {
  const [draft, setDraft] = React.useState('');
  const typingText = useTypingPlaceholder(SUGGESTIONS.map(s => s.label));

  useScrollAnimate();

  const handleSend = () => {
    onSendPrompt(draft, null);
    setDraft('');
  };

  return (
    <div className="home">

      {/* ── Hero ── fills viewport; suggestions live here so body starts below fold ── */}
      <div className="home-hero">

        {/* Decorative background — blobs + flowing curves */}
        <div className="hero-bg-art" aria-hidden="true">
          <div className="hero-blob hero-blob-1" />
          <div className="hero-blob hero-blob-2" />
          <div className="hero-blob hero-blob-3" />
        </div>

        <div className="greeting-eyebrow">Integration & AI Engineer · Salesforce</div>
        <h1 className="greeting">Hi, I'm <em>Sai Krishna.</em></h1>
        <p className="greeting-sub">
          Let's talk Integrations, AI Agents or beyond.
        </p>

        <Composer
          value={draft}
          onChange={setDraft}
          onSend={handleSend}
          large
          animatedPlaceholder={typingText}
        />

        <div className="suggest-row" data-animate data-delay="0">
          {SUGGESTIONS.map((s, i) => (
            <button key={i} className="suggest-chip" onClick={() => onSendPrompt(s.label, null)}>
              <Icon name={s.icon} />
              <span>{s.label}</span>
            </button>
          ))}
        </div>
      </div>

      {/* ── Body ── */}
      <div className="home-body">

        {/* Expertise */}
        <div id="section-expertise" className="section-head" data-animate>
          <div className="section-title">Expertise</div>
          <div className="section-sub">Click any area to start a conversation</div>
        </div>

        <div className="agent-grid">
          {agents.map((agent, i) => (
            <div
              key={agent.id}
              className="agent-card"
              data-animate
              data-delay={i * 60}
              onClick={() => onSendPrompt(agent.prompt, agent)}
            >
              <div className="agent-card-inner">
                <div className="agent-card-head">
                  <div className="agent-avatar lg" style={{ background: agent.color }}>
                    {agent.initial}
                  </div>
                  <div style={{ minWidth: 0 }}>
                    <div className="agent-card-name">{agent.name}</div>
                    <div className="agent-card-role">{agent.role}</div>
                  </div>
                </div>

                <div className="agent-card-desc">{agent.desc}</div>

                <div style={{ display: 'flex', flexWrap: 'wrap', gap: 5, marginBottom: 16 }}>
                  {agent.skills.map((skill, j) => (
                    <span key={j} style={{
                      fontSize: 11, padding: '3px 9px', borderRadius: 999,
                      border: '1px solid var(--border)',
                      background: 'transparent', color: 'var(--ink-mute)',
                      fontWeight: 400,
                    }}>{skill}</span>
                  ))}
                </div>

                <div className="agent-card-foot">
                  <div className="agent-card-stat">
                    <Icon name="zap" style={{ width: 11, height: 11 }} />
                    <span>{agent.runs > 0 ? `${agent.runs} projects` : 'Let\'s connect'}</span>
                  </div>
                  <div className="agent-card-stat" style={{ marginLeft: 'auto' }}>
                    <span>{agent.lastRun}</span>
                  </div>
                </div>
              </div>
            </div>
          ))}
        </div>

        {/* Career Timeline */}
        <div id="section-timeline" className="section-head" data-animate>
          <div className="section-title">Timeline</div>
          <div className="section-sub">Career & education</div>
        </div>

        <div className="timeline">
          {TIMELINE.map((item, i) => (
            <div
              key={i}
              className={`timeline-item${item.current ? ' current' : ''}${item.isEducation ? ' education' : ''}`}
              data-animate
              data-delay={i * 80}
            >
              <div className="timeline-dot" />
              <div className="timeline-period">{item.period}</div>
              <div className="timeline-title">{item.title}</div>
              <div className="timeline-company">{item.company}</div>
              <div className="timeline-desc">{item.desc}</div>
              <div className="timeline-tags">
                {item.tags.map((tag, j) => (
                  <span key={j} className="timeline-tag">{tag}</span>
                ))}
              </div>
            </div>
          ))}
        </div>

        {/* Highlights */}
        <div id="section-highlights" className="section-head" data-animate>
          <div className="section-title">Highlights</div>
          <div className="section-sub">Recent milestones</div>
        </div>

        <div className="activity-preview" data-animate>
          {HOME_ACTIVITY.map((item, i) => {
            const agent = agents.find(a => a.id === item.agent);
            return (
              <div key={i} className="activity-row">
                <div className="agent-avatar" style={{ background: agent.color }}>{agent.initial}</div>
                <div className="activity-text">
                  <span className="who">{agent.name}</span>{' '}
                  <span className="what">{item.text}</span>
                </div>
                <div className="activity-time">{item.time}</div>
              </div>
            );
          })}
        </div>

      </div>

      {/* ── Contact footer ── */}
      <div id="section-contact" className="home-footer" data-animate>
        <div className="home-footer-card">

          {/* Decorative curves — start from right edge, arc to bottom-center */}
          <svg className="footer-curves" viewBox="0 0 1200 140" preserveAspectRatio="none" fill="none" aria-hidden="true">
            <path d="M 1200 22 C 1050 22, 880 55, 720 90 C 640 108, 600 128, 590 140"
                  stroke="var(--accent)" strokeWidth="1.2" strokeLinecap="round" />
            <path d="M 1200 52 C 1040 52, 860 82, 700 108 C 650 118, 620 132, 610 140"
                  stroke="var(--accent)" strokeWidth="0.9" strokeLinecap="round" opacity="0.65" />
            <path d="M 1200 82 C 1060 80, 900 104, 750 122 C 700 130, 660 138, 640 140"
                  stroke="var(--border-strong)" strokeWidth="0.8" strokeLinecap="round" opacity="0.55" />
            <circle cx="1200" cy="22" r="2.5" fill="var(--accent)"        opacity="0.80" />
            <circle cx="1200" cy="52" r="1.8" fill="var(--accent)"        opacity="0.60" />
            <circle cx="1200" cy="82" r="1.5" fill="var(--border-strong)" opacity="0.55" />
          </svg>

          <div className="footer-left">
            <div className="footer-label">Get in touch</div>
            <div className="footer-name">Sai <em>Krishna</em></div>
            <div className="footer-tagline">Integration & AI Engineer · Hyderabad, India</div>
          </div>

          <div className="footer-links">
            <a className="footer-link" href="mailto:durisalasaikrishna9@gmail.com">
              <Icon name="at-sign" />
              <span>Email</span>
            </a>
            <a className="footer-link" href="https://linkedin.com/in/saikrishnadurisala" target="_blank" rel="noopener noreferrer">
              <Icon name="link" />
              <span>LinkedIn</span>
            </a>
            <a className="footer-link" href="https://github.com/saikrishnadurisala" target="_blank" rel="noopener noreferrer">
              <Icon name="globe" />
              <span>GitHub</span>
            </a>
          </div>

        </div>
      </div>

    </div>
  );
};

window.HomeScreen = HomeScreen;
