// app/data.jsx — Ribbon 렌터카 ERP 챗봇: 목업 데이터 + 시나리오 스크립트
// 모든 데이터를 window.RibbonData 로 노출.

const PALETTE = {
  coral: '#cc785c',
  teal: '#5db8a6',
  amber: '#e8a55a',
  blue: '#7595c4',
  rose: '#c47585',
  muted: '#b8ae9f',
};

// ── ERP 대시보드 백드롭용 데이터 ─────────────────────────────
const ERP_KPIS = [
  { label: '총 보유 차량', value: '1,284', unit: '대', delta: '+32', dir: 'up' },
  { label: '전체 가동률', value: '84.2', unit: '%', delta: '+2.1%p', dir: 'up' },
  { label: '이번 달 매출', value: '12.4', unit: '억', delta: '+8.6%', dir: 'up' },
  { label: '정비·점검 중', value: '47', unit: '대', delta: '-5', dir: 'down' },
];

// 차종별 플릿 현황 (대시보드 테이블 + 스포트라이트 타깃)
const FLEET = [
  { id: 'compact', seg: '경차', count: 174, util: 87.4, idle: 22, status: 'ok' },
  { id: 'sedan', seg: '세단', count: 388, util: 82.1, idle: 69, status: 'ok' },
  { id: 'suv', seg: 'SUV', count: 421, util: 91.8, idle: 34, status: 'hot' },
  { id: 'van', seg: '승합', count: 156, util: 73.5, idle: 41, status: 'low' },
  { id: 'ev', seg: '전기차', count: 145, util: 68.2, idle: 46, status: 'low' },
];

const RECENT_RES = [
  { id: 'R-24817', car: 'SUV · 쏘렌토', cust: '김도현', pickup: '오늘 09:30', loc: '강남점', state: '확정' },
  { id: 'R-24816', car: '세단 · K5', cust: '이서연', pickup: '오늘 11:00', loc: '판교점', state: '대기' },
  { id: 'R-24815', car: '경차 · 레이', cust: '박준영', pickup: '오늘 13:15', loc: '강남점', state: '확정' },
];

// ── 챗봇 시작화면 추천 질문 칩 ───────────────────────────────
// 실 백엔드(fleet-pricing MCP·제주 실데이터) 연결 시 바로 답 가능한 질문들로 구성.
const STARTER_CHIPS = [
  '내일 제주 날씨랑 공휴일 보고 SUV 요금 어떻게 잡을지 알려줘',
  '앞으로 어떤 차급을 늘려야 할까? 가동률 기준으로 알려줘',
  '이번 주말 제주에 무슨 행사 있어? 요금에 반영됐어?',
  '다가오는 공휴일 알려주고 그 주 요금 시뮬레이션 해줘',
  '이번 주 제주 SUV 가동률이랑 추천 요금 알려줘',
  '제주 플릿 전체 가동률이랑 이탈 수요 요약해줘',
];

// ── 시나리오 스크립트 ────────────────────────────────────────
// steps: MCP/툴 진행 단계 (label, source, ms)
// blocks: 답변 본문에 렌더할 시각화 블록
const SCENARIOS = [
  {
    id: 'util-compact',
    match: ['경차', '가동률', '이번 달', '이번달'],
    question: '이번 달 경차 가동률 보여줘',
    steps: [
      { label: '인벤토리 DB 연결', source: 'PostgreSQL · fleet', ms: 700 },
      { label: '경차 세그먼트 필터링 (174대)', source: 'fleet.vehicles', ms: 650 },
      { label: '운행 로그 · 가동시간 집계', source: '예약 시스템', ms: 800 },
      { label: '주차별 추이 계산', source: 'analytics', ms: 600 },
    ],
    answer: [
      { type: 'text', md: '이번 달(6월) 경차 **가동률은 평균 87.4%**로, 전체 플릿 평균(84.2%)을 3.2%p 상회합니다. 4주차에 90%를 넘기며 사실상 가용 재고가 거의 소진된 상태예요. 유휴 22대 중 절반은 정비 회전분이라 실질 여유분은 매우 낮습니다.' },
      { type: 'kpi', items: [
        { label: '평균 가동률', value: '87.4', unit: '%', delta: '+4.6%p', dir: 'up' },
        { label: '운행 차량', value: '152', unit: '대', delta: '', dir: '' },
        { label: '유휴 차량', value: '22', unit: '대', delta: '-9', dir: 'down' },
        { label: '일평균 매출', value: '38.2', unit: '만원/대', delta: '+6%', dir: 'up' },
      ]},
      { type: 'bar', title: '주차별 경차 가동률 (6월)', unit: '%', max: 100,
        data: [
          { label: '1주', value: 82.1 }, { label: '2주', value: 85.7 },
          { label: '3주', value: 88.4 }, { label: '4주', value: 91.2 },
        ], color: PALETTE.coral },
    ],
    sources: ['인벤토리 DB', '예약 시스템'],
    followups: ['차종별로 비교해줘', '유휴 차량 22대 목록 보여줘', '경차를 더 들여야 할까?'],
  },
  {
    id: 'util-by-model',
    match: ['차량별', '차종별', '그래프', '지난달', '비교'],
    question: '지난달 차량별 가동률을 그래프로 보여줘',
    steps: [
      { label: '인벤토리 DB 연결', source: 'PostgreSQL · fleet', ms: 650 },
      { label: '5월 운행 로그 집계', source: '예약 시스템', ms: 750 },
      { label: '차종별 가동률 산출', source: 'analytics', ms: 700 },
      { label: '차트 렌더링', source: 'chart engine', ms: 450 },
    ],
    answer: [
      { type: 'text', md: '지난달(5월) 차종별 가동률입니다. **SUV가 91.8%로 가장 높고, 전기차(68.2%)·승합(73.5%)이 하위권**입니다. SUV·세단은 사실상 풀가동에 가까워 추가 수요를 놓치고 있을 가능성이 큽니다.' },
      { type: 'bar', title: '차종별 가동률 (5월)', unit: '%', max: 100,
        data: [
          { label: 'SUV', value: 91.8, color: PALETTE.coral },
          { label: '경차', value: 87.4, color: PALETTE.amber },
          { label: '세단', value: 82.1, color: PALETTE.teal },
          { label: '승합', value: 73.5, color: PALETTE.blue },
          { label: '전기차', value: 68.2, color: PALETTE.muted },
        ] },
      { type: 'text', md: '전기차는 가동률은 낮지만 1건당 단가와 친환경 법인 수요가 늘고 있어, 단순 가동률만으로 축소 판단하기엔 이른 구간입니다.' },
    ],
    sources: ['인벤토리 DB', '예약 시스템'],
    followups: ['SUV를 더 사야 할까?', '전기차 수요 추이 보여줘', '표로도 보여줘'],
  },
  {
    id: 'purchase-recommend',
    match: ['사야', '구매', '추천', '다음 분기', '들여', '증차'],
    question: '다음 분기에 어떤 차량을 더 사야 할까?',
    steps: [
      { label: '인벤토리 · 예약 데이터 수집', source: 'PostgreSQL · fleet', ms: 700 },
      { label: '수요예측 MCP 호출', source: 'mcp: demand-forecast', ms: 950, external: true },
      { label: '차종별 대기수요 · 미충족률 분석', source: 'analytics', ms: 800 },
      { label: '구매 우선순위 산출', source: 'recommendation', ms: 650 },
    ],
    answer: [
      { type: 'text', md: '3분기 수요예측과 현재 가동률을 종합하면, **SUV 증차를 1순위로 권장**합니다. SUV는 가동률 91.8%로 이미 포화이고 다음 분기 예약 대기수요가 +18% 늘 것으로 예측됩니다. 반면 승합은 과잉이라 추가 구매는 보류가 적절합니다.' },
      { type: 'recommend', items: [
        { model: 'SUV (쏘렌토·싼타페급)', qty: '+45대', priority: '1순위',
          reason: '가동률 91.8%로 포화 · 3분기 대기수요 +18% 예측', metrics: [
            { label: '예상 ROI', value: '회수 14개월' }, { label: '미충족 예약', value: '월 210건' } ], tone: 'coral' },
        { model: '전기차 (아이오닉·EV3급)', qty: '+20대', priority: '2순위',
          reason: '가동률은 낮으나 법인·친환경 장기렌탈 수요 +26% 성장', metrics: [
            { label: '예상 ROI', value: '회수 19개월' }, { label: '보조금', value: '대당 400만' } ], tone: 'teal' },
        { model: '승합 (스타리아급)', qty: '보류', priority: '보류',
          reason: '가동률 73.5% · 유휴 41대로 과잉, 신규 구매 불필요', metrics: [
            { label: '유휴', value: '41대' }, { label: '권장', value: '재배치' } ], tone: 'muted' },
      ]},
      { type: 'split', left:
        { type: 'donut', title: '현재 차종 구성비', data: [
          { label: 'SUV', value: 421, color: PALETTE.coral },
          { label: '세단', value: 388, color: PALETTE.teal },
          { label: '경차', value: 174, color: PALETTE.amber },
          { label: '승합', value: 156, color: PALETTE.blue },
          { label: '전기차', value: 145, color: PALETTE.muted },
        ] },
        right:
        { type: 'line', title: 'SUV 분기 수요 추이 (예측 점선)', unit: '건', xLabels: ['Q1', 'Q2', 'Q3', 'Q4'],
          series: [{ label: '예약 수요', color: PALETTE.coral, points: [1820, 2040, 2410, 2680], forecastFrom: 2 }] },
      },
    ],
    sources: ['예약 시스템', '수요예측 MCP', '시장 데이터'],
    followups: ['SUV 45대 구매 비용은?', '전기차 보조금 자세히', '이 추천을 보고서로 만들어줘'],
  },
  {
    id: 'rental-trend',
    match: ['매출', '추이', '6개월', '최근', '렌탈'],
    question: '최근 6개월 렌탈 매출 추이',
    steps: [
      { label: '매출 원장 조회', source: 'finance DB', ms: 700 },
      { label: '월별 집계 · 정규화', source: 'analytics', ms: 700 },
      { label: '추이 차트 생성', source: 'chart engine', ms: 450 },
    ],
    answer: [
      { type: 'text', md: '최근 6개월 렌탈 매출은 꾸준히 우상향하여, **6월 12.4억으로 1월 대비 +31% 성장**했습니다. 단기렌탈과 장기렌탈 모두 성장했으나 장기렌탈 비중이 점차 커지고 있습니다.' },
      { type: 'line', title: '월별 렌탈 매출 (억원)', unit: '억', xLabels: ['1월', '2월', '3월', '4월', '5월', '6월'],
        series: [
          { label: '단기렌탈', color: PALETTE.coral, points: [6.1, 6.4, 6.9, 7.2, 7.6, 7.9] },
          { label: '장기렌탈', color: PALETTE.teal, points: [3.3, 3.6, 3.8, 4.1, 4.3, 4.5] },
        ] },
      { type: 'kpi', items: [
        { label: '6월 총매출', value: '12.4', unit: '억', delta: '+8.6%', dir: 'up' },
        { label: '6개월 누적', value: '64.8', unit: '억', delta: '', dir: '' },
        { label: '장기 비중', value: '36', unit: '%', delta: '+4%p', dir: 'up' },
      ]},
    ],
    sources: ['재무 DB', '예약 시스템'],
    followups: ['지점별 매출도 보여줘', '장기렌탈 비중을 더 늘리려면?'],
  },
  {
    id: 'reservations',
    match: ['예약', '오늘', '픽업', '현황'],
    question: '오늘 픽업 예정 예약 보여줘',
    steps: [
      { label: '예약 시스템 조회', source: '예약 시스템', ms: 650 },
      { label: '오늘 픽업 건 필터', source: 'reservations', ms: 550 },
    ],
    answer: [
      { type: 'text', md: '오늘 픽업 예정 예약은 **총 38건**이며, 그중 대기 상태 6건은 차량 배정이 필요합니다. 강남점에 픽업이 집중되어 있어 차량 회전 점검을 권장해요.' },
      { type: 'table', title: '오늘 픽업 예약 (상위 5건)',
        columns: ['예약번호', '차량', '고객', '픽업', '지점', '상태'],
        rows: [
          ['R-24817', 'SUV · 쏘렌토', '김도현', '09:30', '강남점', { tag: '확정', tone: 'ok' }],
          ['R-24816', '세단 · K5', '이서연', '11:00', '판교점', { tag: '대기', tone: 'low' }],
          ['R-24815', '경차 · 레이', '박준영', '13:15', '강남점', { tag: '확정', tone: 'ok' }],
          ['R-24814', 'SUV · 싼타페', '최민서', '14:40', '강남점', { tag: '대기', tone: 'low' }],
          ['R-24813', '전기차 · EV6', '정하윤', '16:20', '잠실점', { tag: '확정', tone: 'ok' }],
        ] },
    ],
    sources: ['예약 시스템'],
    followups: ['대기 6건 차량 배정해줘', '지점별 픽업 분포 보여줘'],
  },
  {
    id: 'low-stock',
    match: ['재고', '부족', '없어', '품귀'],
    question: '재고가 부족한 차종 있어?',
    spotlight: 'suv', // ERP 대시보드의 SUV 행을 하이라이트
    steps: [
      { label: '실시간 가용 재고 조회', source: 'fleet · realtime', ms: 700 },
      { label: '대기수요 대비 가용분 비교', source: 'analytics', ms: 700 },
    ],
    answer: [
      { type: 'text', md: '현재 **SUV 재고가 가장 빠듯**합니다. 가동률 91.8%에 가용 34대뿐인데 주말 예약 대기가 몰려 있어 사실상 품귀 직전입니다. 대시보드의 SUV 항목을 강조해 두었어요. 경차도 곧 임계에 닿습니다.' },
      { type: 'table', title: '재고 임계 차종',
        columns: ['차종', '가용', '가동률', '주말 대기', '상태'],
        rows: [
          ['SUV', '34대', '91.8%', '210건', { tag: '품귀 임박', tone: 'low' }],
          ['경차', '22대', '87.4%', '88건', { tag: '주의', tone: 'mid' }],
          ['세단', '69대', '82.1%', '54건', { tag: '여유', tone: 'ok' }],
        ] },
    ],
    sources: ['인벤토리 DB', '예약 시스템'],
    followups: ['SUV를 더 사야 할까?', '다른 지점에서 SUV 재배치 가능해?'],
  },
];

// 기본(매칭 안 될 때) 응답
const FALLBACK = {
  id: 'fallback',
  steps: [
    { label: '질문 의도 분석', source: 'router', ms: 600 },
    { label: '관련 데이터 소스 탐색', source: 'fleet · 예약 시스템', ms: 700 },
  ],
  answer: [
    { type: 'text', md: '리본 ERP의 인벤토리·예약·매출 데이터를 기반으로 답변할 수 있어요. 아래 추천 질문을 눌러보거나, 차종·기간·지표를 포함해 질문해 주세요.' },
  ],
  sources: ['인벤토리 DB'],
  followups: STARTER_CHIPS.slice(0, 3),
};

// 초기 FAQ 목록 (등록·관리 화면)
const FAQS = [
  { id: 1, q: '이번 달 경차 가동률 보여줘', cat: '가동률', uses: 142, pinned: true },
  { id: 2, q: '다음 분기에 어떤 차량을 더 사야 할까?', cat: '구매 추천', uses: 98, pinned: true },
  { id: 3, q: '오늘 픽업 예정 예약 보여줘', cat: '예약', uses: 76, pinned: false },
  { id: 4, q: '최근 6개월 렌탈 매출 추이', cat: '매출', uses: 61, pinned: false },
  { id: 5, q: '지점별 가동률 비교해줘', cat: '가동률', uses: 44, pinned: false },
];

// 대화 히스토리(세션) 목록
const SESSIONS = [
  { id: 's1', title: '6월 경차 가동률 분석', time: '방금', active: true },
  { id: 's2', title: '3분기 차량 구매 계획', time: '어제' },
  { id: 's3', title: '전기차 수요 추이 검토', time: '2일 전' },
  { id: 's4', title: '강남점 예약 집중 현황', time: '지난주' },
];

// ── 업체(테넌트) 캐노니컬 시드 — Reborn T_CORP 형태 (docs/51) ─
// 키 (SYS_CODE, CORP_CODE) · 이름 CORP_NM · region ← CORP · id 는 안정 슬러그.
// ★ 초기 도입/파일럿 업체 = 더세이프(thesafe). 이 트랙은 그 업체 위주로 구성.
//   라이브 확정: 더세이프 제주 운영 실체=(주)더세이프앤코(코드 INTERPARK, SYS==CORP 문자열); 서울영업소 THESAFESEOUL 은 빈 레코드(예약 0).
//   데모 2건은 실 제주 업체(제주렌트카·제주패스렌트카) — tenant.ts 카탈로그와 동일(정합 필수).
const TENANTS = [
  { id: 'thesafe',   sys_code: 'INTERPARK', corp_code: 'INTERPARK', name: '(주)더세이프앤코', region: '제주', mosaicar_yn: 'N' }, // ★기본 활성 = 초기 도입 파일럿(더세이프 제주 운영 실체, 코드 INTERPARK)
  { id: 'jeju-rent', sys_code: 'JEJURENT',  corp_code: 'JEJURENT',  name: '제주렌트카',       region: '제주', mosaicar_yn: 'N' },
  { id: 'jeju-pass', sys_code: 'JJPASS',    corp_code: 'JJPASS',    name: '제주패스렌트카',   region: '제주', mosaicar_yn: 'N' },
];

// 업체별 설정(TenantConfig) 기본값 — id 로 키잉. pilot 은 region==='제주'.
const TENANT_CONFIGS = TENANTS.reduce((acc, t) => {
  acc[t.id] = {
    llm: { provider: 'openai', model: 'gpt-4o' },
    guardrail_policy_ref: 'default',
    pilot: t.region === '제주',
    holdout: { branches: [], vehicle_classes: [] },
    feature_flags: { fleet_optimization: true, auto_apply: false },
  };
  return acc;
}, {});

function matchScenario(text) {
  const t = (text || '').toLowerCase();
  let best = null, bestScore = 0;
  for (const s of SCENARIOS) {
    let score = 0;
    for (const m of s.match) if (t.includes(m.toLowerCase())) score++;
    if (score > bestScore) { bestScore = score; best = s; }
  }
  return bestScore > 0 ? best : FALLBACK;
}

window.RibbonData = {
  PALETTE, ERP_KPIS, FLEET, RECENT_RES, STARTER_CHIPS,
  SCENARIOS, FALLBACK, FAQS, SESSIONS, matchScenario,
  TENANTS, TENANT_CONFIGS,
};
