import { useEffect, useRef } from 'react';

export default function SettingsDialog({
  backendUrl,
  defaultBackendUrl,
  liveDebugUrl,
  llmProvider,
  deepinfraApiKey,
  deepinfraHasKey,
  deepinfraKeyStatus,
  isOpen,
  onBackendUrlChange,
  onLiveDebugUrlChange,
  onLlmProviderChange,
  onDeepinfraApiKeyChange,
  onClose,
  onResetToDefault,
  onSave,
}) {
  const inputRef = useRef(null);

  useEffect(() => {
    if (!isOpen || !inputRef.current) {
      return;
    }

    inputRef.current.focus();
    inputRef.current.select();
  }, [isOpen]);

  if (!isOpen) {
    return null;
  }

  return (
    <div
      className="settings-overlay"
      onMouseDown={(event) => {
        if (event.target === event.currentTarget) {
          onClose();
        }
      }}
    >
      <div className="settings-dialog">
        <div className="settings-dialog__header">
          <div>
            <div className="settings-dialog__eyebrow">Настройки</div>
            <h2 className="settings-dialog__title">Настройки графа</h2>
          </div>
          <button type="button" className="toolbar__button" onClick={onClose}>
            Закрыть
          </button>
        </div>

        <div className="settings-dialog__body">
          <label className="field-stack">
            <span className="field-label">Backend URL</span>
            <input
              ref={inputRef}
              className="node-input"
              type="text"
              value={backendUrl}
              placeholder="http://localhost:8000"
              onChange={(event) => onBackendUrlChange(event.target.value)}
            />
          </label>

          <div className="settings-dialog__note">
            Укажи адрес backend сервера, на который уходят запросы графа. Можно использовать локальный адрес вроде
            `http://localhost:8000` или удалённый сервер.
          </div>

          <div className="settings-dialog__default">
            <span>Значение из config:</span>
            <code>{defaultBackendUrl}</code>
          </div>

          <label className="field-stack">
            <span className="field-label">Live debug runtime URL</span>
            <input
              className="node-input"
              type="text"
              value={liveDebugUrl}
              placeholder="http://localhost:8001"
              onChange={(event) => onLiveDebugUrlChange(event.target.value)}
            />
          </label>

          <div className="settings-dialog__note">
            Отдельный адрес runtime для подключения к рабочему Brains. Пустое значение означает стандартный Brains URL: `http://localhost:8001`.
          </div>

          <label className="field-stack">
            <span className="field-label">LLM provider</span>
            <select
              className="node-input"
              value={llmProvider}
              onChange={(event) => onLlmProviderChange(event.target.value)}
            >
              <option value="deepinfra">DeepInfra</option>
              <option value="ollama">Ollama</option>
            </select>
          </label>

          <div className="settings-dialog__note">
            Provider применяется ко всем LLM-вызовам графа: semantic branch, save memory, knowledge answer,
            LLM-ноды ассистента, автоответ и evaluator в LLM-тесте.
          </div>

          {llmProvider === 'deepinfra' ? (
            <>
              <label className="field-stack">
                <span className="field-label">DeepInfra API Key</span>
                <input
                  className="node-input"
                  type="password"
                  value={deepinfraApiKey}
                  placeholder={deepinfraHasKey ? 'Ключ сохранен. Оставьте пустым, чтобы не менять.' : 'Введите DeepInfra API key'}
                  autoComplete="off"
                  onChange={(event) => onDeepinfraApiKeyChange(event.target.value)}
                />
              </label>

              <div className="settings-dialog__note">
                {deepinfraKeyStatus ||
                  (deepinfraHasKey
                    ? 'DeepInfra key уже сохранен локально на backend.'
                    : 'DeepInfra key обязателен и будет сохранен локально на backend.')}
              </div>
            </>
          ) : null}
        </div>

        <div className="settings-dialog__footer">
          <button type="button" className="toolbar__button" onClick={onResetToDefault}>
            Взять из config
          </button>
          <div className="button-row">
            <button type="button" className="toolbar__button" onClick={onClose}>
              Отмена
            </button>
            <button type="button" className="toolbar__button toolbar__button--primary" onClick={onSave}>
              Сохранить настройки
            </button>
          </div>
        </div>
      </div>
    </div>
  );
}
