// Lorem Ipsum Generator — generate placeholder paragraphs from a pool of classic sentences.

window.TOOL_HANDLERS['lorem-ipsum'] = function LoremIpsumTool() {
  const SENTENCES = [
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
    'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
    'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
    'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.',
    'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
    'Curabitur pretium tincidunt lacus, nec faucibus nisl sodales ut.',
    'Praesent commodo cursus magna, vel scelerisque nisl consectetur et.',
    'Donec sed odio dui, id varius quam placerat ante.',
    'Maecenas sed diam eget risus varius blandit sit amet non magna.',
    'Aenean lacinia bibendum nulla sed consectetur.',
    'Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh.',
    'Integer posuere erat a ante venenatis dapibus posuere velit aliquet.',
    'Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.',
    'Nullam quis risus eget urna mollis ornare vel eu leo.',
    'Vestibulum id ligula porta felis euismod semper.',
    'Cras mattis consectetur purus sit amet fermentum.',
    'Morbi leo risus, porta ac consectetur ac, vestibulum at eros.',
    'Etiam porta sem malesuada magna mollis euismod.',
    'Nulla vitae elit libero, a pharetra augue.',
    'Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.',
  ];

  const CLASSIC_OPENER = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';

  const [count, setCount] = React.useState(3);
  const [startClassic, setStartClassic] = React.useState(true);
  const [output, setOutput] = React.useState('');
  const [copied, setCopied] = React.useState(false);

  const generate = React.useCallback(() => {
    const paragraphs = [];
    for (let p = 0; p < count; p++) {
      const sentenceCount = 4 + Math.floor(Math.random() * 4); // 4-7
      const sentences = [];
      for (let s = 0; s < sentenceCount; s++) {
        if (p === 0 && s === 0 && startClassic) {
          sentences.push(CLASSIC_OPENER);
        } else {
          sentences.push(SENTENCES[Math.floor(Math.random() * SENTENCES.length)]);
        }
      }
      paragraphs.push(sentences.join(' '));
    }
    setOutput(paragraphs.join('\n\n'));
    setCopied(false);
  }, [count, startClassic]);

  // Generate on mount and when settings change
  React.useEffect(() => { generate(); }, [generate]);

  const copy = () => {
    navigator.clipboard.writeText(output);
    setCopied(true);
    setTimeout(() => setCopied(false), 1500);
  };

  return (
    <div className="mini-tool">
      <div className="mini-row" style={{ alignItems: 'flex-end' }}>
        <div className="mini-field" style={{ flex: '0 0 140px' }}>
          <label className="mini-label">Paragraphs</label>
          <input
            type="number"
            className="mini-input"
            min="1"
            max="50"
            value={count}
            onChange={(e) => setCount(Math.max(1, Math.min(50, Number(e.target.value) || 1)))}
          />
        </div>
        <label style={{
          display: 'flex', alignItems: 'center', gap: 8, cursor: 'pointer',
          fontSize: 14, color: 'var(--id-text-secondary)'
        }}>
          <input
            type="checkbox"
            checked={startClassic}
            onChange={(e) => setStartClassic(e.target.checked)}
          />
          Start with "Lorem ipsum dolor sit amet..."
        </label>
      </div>

      <div className="cmp-actions" style={{ marginTop: 14 }}>
        <button className="btn btn-secondary" onClick={generate}>
          <window.Icon name="rotate" size={16} /> Regenerate
        </button>
      </div>

      <label className="mini-label" style={{ marginTop: 16 }}>Output</label>
      <textarea
        className="mini-input mini-textarea"
        style={{ minHeight: 220 }}
        readOnly
        value={output}
      />

      <div className="wc-grid" style={{ marginTop: 12 }}>
        <div className="wc-stat">
          <div className="wc-v">{count}</div>
          <div className="wc-l">Paragraphs</div>
        </div>
        <div className="wc-stat">
          <div className="wc-v">{output ? output.split(/\s+/).filter(Boolean).length : 0}</div>
          <div className="wc-l">Words</div>
        </div>
        <div className="wc-stat">
          <div className="wc-v">{output.length.toLocaleString()}</div>
          <div className="wc-l">Characters</div>
        </div>
      </div>

      <div className="cmp-actions">
        <button className="btn btn-primary" onClick={copy} disabled={!output}>
          <window.Icon name={copied ? 'check' : 'doc'} size={16} />
          {copied ? 'Copied!' : 'Copy'}
        </button>
      </div>
    </div>
  );
};
