/**
 * kind별 노드 모양 (CSS clip-path) + 색상 헬퍼
 */

import type { NodeKind, NodeStatus } from '../manifest';
import { STAGE_COLORS } from '../manifest';

export function shapeClipPath(kind: NodeKind): string | undefined {
  switch (kind) {
    case 'source':
      // 사다리꼴 (입력 방향)
      return 'polygon(0 0, 100% 0, 92% 100%, 8% 100%)';
    case 'cache':
      // 둥근 사각형은 border-radius로 처리
      return undefined;
    case 'pipeline':
      // 파이프라인 단계 — 화살표 모양
      return 'polygon(0 0, 92% 0, 100% 50%, 92% 100%, 0 100%, 8% 50%)';
    case 'algorithm':
      // 다이아몬드
      return 'polygon(50% 0, 100% 50%, 50% 100%, 0 50%)';
    case 'output':
      // 사다리꼴 (출력 방향)
      return 'polygon(8% 0, 92% 0, 100% 100%, 0 100%)';
    case 'storage':
      // 실린더 모양 (DB)
      return undefined; // 별도 ::before로 처리
    case 'api':
      // 6각형
      return 'polygon(7% 0, 93% 0, 100% 50%, 93% 100%, 7% 100%, 0 50%)';
    case 'ui':
      // 직사각형 (기본)
      return undefined;
    case 'decision':
      // 마름모 (사용자 액션)
      return 'polygon(50% 0, 100% 50%, 50% 100%, 0 50%)';
    case 'external':
      // 점선 테두리 사각형
      return undefined;
    default:
      return undefined;
  }
}

export function stageColor(stage: string): string {
  return STAGE_COLORS[stage] ?? '#94a3b8';
}

export function statusBorderStyle(status: NodeStatus): string {
  switch (status) {
    case 'planned':
      return 'dashed';
    case 'deprecated':
      return 'dotted';
    default:
      return 'solid';
  }
}

export function statusOpacity(status: NodeStatus): number {
  switch (status) {
    case 'deprecated':
      return 0.5;
    case 'planned':
      return 0.75;
    default:
      return 1;
  }
}
