export const NODE_IDS = {
  DATA:     'data',
  GATE:     'gate-hygiene',
  FOREIGN:  'score-foreign-buy',
  VOLUME:   'score-volume-surge',
  MOMENTUM: 'score-momentum',
  HIGH52W:  'score-high52w',
  RS:       'score-rs-rating',
  MA:       'score-ma-alignment',
  VCP:      'score-vcp-lite',
  AI_NEWS:  'score-ai-news',
  COMBINE:  'combine',
  RESULT:   'result',
};

export const NODE_KIND_MAP = {
  [NODE_IDS.DATA]:     'data',
  [NODE_IDS.GATE]:     'gate',
  [NODE_IDS.FOREIGN]:  'score',
  [NODE_IDS.VOLUME]:   'score',
  [NODE_IDS.MOMENTUM]: 'score',
  [NODE_IDS.HIGH52W]:  'score',
  [NODE_IDS.RS]:       'score',
  [NODE_IDS.MA]:       'score',
  [NODE_IDS.VCP]:      'score',
  [NODE_IDS.AI_NEWS]:  'score',
  [NODE_IDS.COMBINE]:  'combine',
  [NODE_IDS.RESULT]:   'result',
};

// 캔버스 노드 ID → 백엔드 score node name (registry 키)
export const SCORE_NODE_NAME_MAP = {
  [NODE_IDS.FOREIGN]:  'foreign_buy',
  [NODE_IDS.VOLUME]:   'volume_surge',
  [NODE_IDS.MOMENTUM]: 'momentum',
  [NODE_IDS.HIGH52W]:  'high52w',
  [NODE_IDS.RS]:       'rs_rating',
  [NODE_IDS.MA]:       'ma_alignment',
  [NODE_IDS.VCP]:      'vcp_lite',
  [NODE_IDS.AI_NEWS]:  'ai_news',
};

// 4단 layout: DATA → GATE → (점수 7개 세로) → COMBINE → RESULT
export const INITIAL_NODE_POSITIONS = {
  [NODE_IDS.DATA]:     { x:   40, y: 280 },
  [NODE_IDS.GATE]:     { x:  240, y: 280 },
  [NODE_IDS.FOREIGN]:  { x:  480, y:   0 },
  [NODE_IDS.VOLUME]:   { x:  480, y:  90 },
  [NODE_IDS.MOMENTUM]: { x:  480, y: 180 },
  [NODE_IDS.HIGH52W]:  { x:  480, y: 270 },
  [NODE_IDS.RS]:       { x:  480, y: 360 },
  [NODE_IDS.MA]:       { x:  480, y: 450 },
  [NODE_IDS.VCP]:      { x:  480, y: 540 },
  [NODE_IDS.AI_NEWS]:  { x:  480, y: 630 },
  [NODE_IDS.COMBINE]:  { x:  800, y: 280 },
  [NODE_IDS.RESULT]:   { x: 1080, y: 280 },
};

const SCORE_KEYS = ['FOREIGN','VOLUME','MOMENTUM','HIGH52W','RS','MA','VCP','AI_NEWS'];

export const EDGES = [
  { id: 'e-data-gate', source: NODE_IDS.DATA, target: NODE_IDS.GATE },
  ...SCORE_KEYS.map((k) => ({
    id: `e-gate-${k.toLowerCase()}`,
    source: NODE_IDS.GATE,
    target: NODE_IDS[k],
  })),
  ...SCORE_KEYS.map((k) => ({
    id: `e-${k.toLowerCase()}-combine`,
    source: NODE_IDS[k],
    target: NODE_IDS.COMBINE,
  })),
  { id: 'e-combine-result', source: NODE_IDS.COMBINE, target: NODE_IDS.RESULT },
];

export const SCORE_NODE_LABEL = {
  [NODE_IDS.FOREIGN]:  { icon: '🌏', title: '외국인 매수' },
  [NODE_IDS.VOLUME]:   { icon: '📊', title: '거래량 급증' },
  [NODE_IDS.MOMENTUM]: { icon: '🚀', title: '모멘텀' },
  [NODE_IDS.HIGH52W]:  { icon: '🔝', title: '52주 고가' },
  [NODE_IDS.RS]:       { icon: '💪', title: 'RS Rating' },
  [NODE_IDS.MA]:       { icon: '📈', title: '이평선 정렬' },
  [NODE_IDS.VCP]:      { icon: '🌀', title: 'VCP-lite' },
  [NODE_IDS.AI_NEWS]:  { icon: '🤖', title: 'AI 뉴스' },
};
