import { HelpText } from './HelpText';
import { EnvOverrideWarning, FieldLabel, FieldInput } from './formUtils';
import type { SectionFormProps } from './types';

/**
 * Paths & Storage — config v2 `storage.*` block.
 *
 * Reads from the new `storage.*` keys emitted by `GET /api/config` (after
 * #360 normalization + #362 v2 API shape). Old flat keys (`worktreeDir` etc.)
 * are rejected by `PUT /api/config` since v2, so this form only writes
 * `storage.*`.
 */
export function PathsStorageForm({ config, onChange, overriddenByEnv }: SectionFormProps) {
  const storage = config.storage ?? {};

  return (
    <div className="space-y-5">
      <h2 className="text-base font-semibold text-slate-800">Paths &amp; Storage</h2>
      <HelpText>
        ファイルシステム上の保存先と上限の設定。config v2 では <code className="font-mono">storage.*</code> に集約されています。
      </HelpText>

      <div>
        <FieldLabel>Worktree Directory</FieldLabel>
        <FieldInput
          value={storage.worktreeDir ?? ''}
          onChange={v => onChange('storage.worktreeDir', v || undefined)}
          disabled={!!overriddenByEnv['storage.worktreeDir'] || !!overriddenByEnv['worktreeDir']}
          disabledReason="WORKTREE_DIR 環境変数で上書き中"
        />
        {(overriddenByEnv['storage.worktreeDir'] || overriddenByEnv['worktreeDir']) && <EnvOverrideWarning />}
        <HelpText>ジョブ実行時の作業ディレクトリのベースパス</HelpText>
      </div>

      <div>
        <FieldLabel>Custom Pieces Directory</FieldLabel>
        <FieldInput
          value={storage.customPiecesDir ?? ''}
          onChange={v => onChange('storage.customPiecesDir', v || undefined)}
          placeholder="/path/to/your/custom-pieces"
        />
        <HelpText>リポジトリ内の pieces/ とは別に、追加の Piece を配置するディレクトリ。省略時は pieces/ のみ使用</HelpText>
      </div>

      <div>
        <FieldLabel>User Folder Root</FieldLabel>
        <FieldInput
          value={storage.userFolderRoot ?? ''}
          onChange={v => onChange('storage.userFolderRoot', v || undefined)}
          placeholder="./data/users"
        />
        <HelpText>ユーザーごとの設定・スクリプト・メモリ等を保存するルートディレクトリ</HelpText>
      </div>

      <div>
        <FieldLabel>Task Upload 最大サイズ (MB)</FieldLabel>
        <FieldInput
          type="number"
          value={storage.taskUploadMaxSizeMb ?? 50}
          onChange={v => onChange('storage.taskUploadMaxSizeMb', v ? Number(v) : undefined)}
        />
        <HelpText>
          <code>POST /api/local/tasks</code> および <code>POST /api/local/tasks/:id/comments</code> の
          リクエスト body 上限。範囲 1〜1000 MB、デフォルト 50。
        </HelpText>
      </div>

      <div>
        <FieldLabel>Trash Retention (日)</FieldLabel>
        <FieldInput
          type="number"
          value={storage.trashRetentionDays ?? 30}
          onChange={v => onChange('storage.trashRetentionDays', v ? Number(v) : undefined)}
        />
        <HelpText>
          <code>data/users/&#123;userId&#125;/trash/</code> のファイルを自動削除するまでの日数。
          0 を指定すると即削除。デフォルト 30 日。
        </HelpText>
      </div>
    </div>
  );
}
