import { coreWorkflowNavGroup, navApps } from '../acAssets'
import { PLACEMENT_FLOW } from '../placementFlow'
import { registerIslanderPage } from './pageRegistry'
import type { IslanderPageMeta } from './types'

export type RouteGuide = IslanderPageMeta & {
  pattern: RegExp
}

export const routeGuides: RouteGuide[] = [
  {
    pattern: /^\/$/,
    title: '總覽',
    purpose: '查看巡樓工作台捷徑與近期狀態',
    hints: ['建立經營帳號與連線請到設定', '背景任務進度可看左下「任」或任務列表'],
    suggestions: ['這頁要怎麼用？', '帶我去設定頁', '任務列表在哪？'],
  },
  {
    pattern: /^\/settings$/,
    title: '設定',
    purpose: '經營帳號顯示名稱、連線模式、AI provider 與 API key',
    hints: ['AI 設定同一登入帳號共用', 'Chrome Session 同步在 Threads 連線細節'],
    suggestions: ['幫我捲到 AI 設定', '怎麼連 Threads？', 'AI 設定怎麼存？'],
  },
  {
    pattern: /^\/brands$/,
    title: '品牌庫',
    purpose: '建立品牌與產品定位，供海巡獲客使用',
    hints: ['品牌決定 productFit 與海巡方向', '寫留言語氣到人設庫設定'],
    suggestions: ['怎麼建立品牌？', '品牌填完下一步？', '帶我去海巡研究'],
  },
  {
    pattern: /^\/brands\/[^/]+$/,
    title: '品牌詳情',
    purpose: '編輯產品簡介、受眾與經營目標',
    hints: ['填好產品與受眾後進入 ① 海巡研究', '回覆語氣在人設庫'],
    suggestions: ['幫我補產品簡介', '可以開始海巡了嗎？'],
  },
  {
    pattern: /^\/personas$/,
    title: '人設庫',
    purpose: '管理回覆與發文的語氣策略（8D）',
    hints: ['找 TA 寫留言時選人設', '品牌與產品定位在品牌庫'],
    suggestions: ['8D 分析完下一步？', '人設要怎麼用在留言？'],
  },
  {
    pattern: /^\/placement\/topics$/,
    title: '置入主題',
    purpose: '流程 B 起點：新增主題、自動產生置入研究地圖',
    hints: [
      '按「新增主題」填置入品牌與產品',
      '建立後進入 ① 置入研究擴展圖譜並置入海巡',
      '海巡完成後到找 TA 留言工作台',
    ],
    suggestions: ['幫我新增一個主題', '哪個主題可以開始海巡？'],
  },
  {
    pattern: /^\/outreach$/,
    title: '找 TA 留言',
    purpose: '置入海巡結果與獲客留言草稿（需 ?brand= 指定主題）',
    hints: [
      '寫留言前選「回覆人設」決定語氣',
      'gold = 相關軌與近期軌都命中',
      'Threads API 連線後可 publishOutreach 發送',
    ],
    suggestions: ['哪幾篇適合留言？', '幫我寫獲客留言'],
  },
  {
    pattern: /^\/matrix$/,
    title: '拷貝忍者',
    purpose: '流程 A：對標研究地圖、爆款掃描、依 8D 風格產仿寫草稿',
    hints: [
      '先在人設庫完成對標帳號 8D 分析',
      '不是產品獲客／找 TA 流程',
      '不要使用 expandKnowledgeGraph、productFitScore 等流程 B 動作',
    ],
    suggestions: ['怎麼設定對標帳號？', '帶我去人設庫', '拷貝忍者跟找 TA 差在哪？'],
  },
  {
    pattern: /^\/brand-matrix$/,
    title: '原創矩陣',
    purpose: '流程 B 第三步：依獲客海巡素材產生原創 Threads 貼文草稿',
    hints: [
      '頂部可切換品牌',
      '素材來自 7 天內、產品匹配 ≥70 的獲客海巡貼文',
      '與獲客留言、拷貝忍者仿寫不同',
    ],
    suggestions: ['幫我產生 5 則原創貼文', '哪個角度適合這個主題？'],
  },
  {
    pattern: /^\/research$/,
    title: '置入研究',
    purpose: '置入研究地圖、Brave 知識圖譜、置入海巡準備',
    hints: [
      '頂部可切換品牌',
      '種子詞觸發 expand-graph 背景任務',
      '痛點候選建議 ≥8，不足可補充擴展',
      '勾選節點後儲存，再進行雙軌海巡',
    ],
    suggestions: ['幫我擴展圖譜', '痛點 tag 夠了嗎？', '要勾選哪些節點？'],
  },
  {
    pattern: /^\/personas\/[^/]+$/,
    title: '人設詳情',
    purpose: '檢視 8D 風格分析與編輯回覆語氣',
    hints: [
      '可從這裡觸發或查看關聯的 8D 任務',
      '品牌與產品定位請到品牌庫',
      '「人設與語氣」欄位可用 fill 直接填入',
    ],
    suggestions: [],
  },
  {
    pattern: /^\/jobs$/,
    title: '任務列表',
    purpose: '查看所有背景任務狀態',
    hints: ['8D 風格分析會出現在這裡', '進行中任務也可看左下「任」'],
    suggestions: ['8D 任務失敗怎麼辦？', '幫我刷新任務列表', '任務進度去哪看？'],
  },
  {
    pattern: /^\/jobs\/[^/]+$/,
    title: '任務詳情',
    purpose: '查看單一任務事件、進度與錯誤',
    hints: ['失敗時先看錯誤訊息與連線狀態', '8D 失敗常與 AI key 或 session 有關'],
    suggestions: ['8D 任務失敗怎麼辦？', '這個任務現在什麼狀態？', '帶我去設定檢查 AI key'],
  },
  {
    pattern: /^\/job-schedules$/,
    title: '排程',
    purpose: '管理定時觸發的背景任務',
    hints: ['需先有任務模板', '注意 cron 時區僅用於解讀排程'],
    suggestions: ['怎麼建立排程？', '這頁要怎麼用？'],
  },
  {
    pattern: /^\/job-templates$/,
    title: '任務模板',
    purpose: '查看可用的 job 模板類型',
    hints: ['8D 等模板由系統註冊', '建立任務時選擇模板'],
    suggestions: ['8D 模板在哪？', '這頁要怎麼用？'],
  },
  {
    pattern: /^\/threads\/[^/]+\/publish$/,
    title: '發文工作區',
    purpose: '為目前經營帳號撰寫與發佈 Threads 內容',
    hints: ['先確認連線與人設', '可切換不同經營帳號'],
    suggestions: ['怎麼選人設發文？', '連線狀態去哪看？', '這頁要怎麼用？'],
  },
  {
    pattern: /^\/threads\/[^/]+\/connections$/,
    title: 'Threads 連線',
    purpose: 'API 狀態、Chrome Session 與開發模式設定',
    hints: ['開發模式可用 extension 同步 session', '正式發文前確認連線就緒'],
    suggestions: ['怎麼同步 Chrome Session？', '開發模式怎麼開？', '連線失敗怎麼辦？'],
  },
  {
    pattern: /^\/ai$/,
    title: 'AI 實驗台',
    purpose: '直接測試 provider 與模型（進階）',
    hints: ['日常建議用設定頁的 AI 設定', '島民聊天會自動讀設定頁的 key'],
    suggestions: ['這頁要怎麼用？', 'AI key 要去哪裡設？'],
  },
  {
    pattern: /^\/profile$/,
    title: '會員資料',
    purpose: '查看與更新個人資料',
    hints: [],
    suggestions: ['怎麼改顯示名稱？', '這頁要怎麼用？'],
  },
  {
    pattern: /^\/permissions$/,
    title: '權限',
    purpose: '查看目前角色可用權限',
    hints: [],
    suggestions: ['我有哪些權限？', '這頁要怎麼用？'],
  },
]

for (const guide of routeGuides) {
  const { pattern, ...meta } = guide
  registerIslanderPage(pattern, meta)
}

export function matchRouteGuide(pathname: string) {
  for (const guide of routeGuides) {
    if (guide.pattern.test(pathname)) return guide
  }
  return null
}

export function formatSiteNavGuide(): string {
  const core = coreWorkflowNavGroup()
    .items.map((item) => `- ${item.label}（外層）→ ${item.to}`)
    .join('\n')
  const placement = PLACEMENT_FLOW.map(
    (step) => `- 找 TA ${step.step} ${step.label} → ${step.path}?brand=`,
  ).join('\n')
  const workspace = navApps.map((item) => `- ${item.label} → ${item.to}`).join('\n')
  return ['【外層雙軌】', core, '', '【找 TA 子步驟（流程 B）】', placement, '', '【工作區】', workspace].join(
    '\n',
  )
}