// Zed 快捷鍵
// 版控於 ~/Workspace/00_MacOS/02-setup/zed/keymap.json
// 由 ~/.config/zed/keymap.json symlink 過來
//
// 基準來源：~/Documents/Cursor/keybindings.json（2026-07 的 Cursor 配置）
//
// 注意：以下由 settings.json 的 "base_keymap": "SublimeText" 提供，此處不重複定義
//   ctrl-shift-up / ctrl-shift-down   上下加游標
//   ctrl-shift-l                      選取拆成每行游標
//   cmd-d                             選取下一個相同字（Zed 預設）
//   cmd-k cmd-d                       跳過目前這個、選下一個
[
  // ============================================================
  // 導覽與分頁
  // ============================================================
  {
    "context": "Workspace",
    "bindings": {
      // Zed 的檔案樹是 toggle：按一次進去、再按一次回編輯器
      // 因此 Cursor 的 cmd-shift-2（聚焦編輯器）在此不需要獨立綁定
      "cmd-shift-1": "project_panel::ToggleFocus",

      "cmd-1": ["pane::ActivateItem", 0],
      "cmd-2": ["pane::ActivateItem", 1],
      "cmd-3": ["pane::ActivateItem", 2],
      "cmd-4": ["pane::ActivateItem", 3],
      "cmd-5": ["pane::ActivateItem", 4],
      "cmd-6": ["pane::ActivateItem", 5],
      "cmd-7": ["pane::ActivateItem", 6],
      "cmd-8": ["pane::ActivateItem", 7],
      "cmd-9": "pane::ActivateLastItem"
    }
  },

  // ============================================================
  // 編輯操作與摺疊
  // ============================================================
  {
    "context": "Editor",
    "bindings": {
      // ----- 多游標與選取 -----
      // 這幾項理論上 SublimeText preset 已提供，但不同版本的 preset 內容會變，
      // 明確寫在這裡才不受 Zed 更新影響
      "ctrl-shift-up": "editor::AddSelectionAbove",
      "ctrl-shift-down": "editor::AddSelectionBelow",
      "ctrl-shift-l": "editor::SplitSelectionIntoLines",
      "cmd-d": "editor::SelectNext",
      "cmd-shift-d": "editor::DuplicateSelection",

      // ----- 格式化 -----
      // Zed 預設 cmd-shift-f 是全專案搜尋、cmd-shift-i 才是格式化，
      // 此處改為 cmd-shift-f 格式化，並把全專案搜尋讓給 cmd-shift-alt-f
      "cmd-shift-f": "editor::Format",
      "cmd-shift-alt-f": "pane::DeploySearch",

      // 放棄未存變更、重載檔案（對應 Cursor 的 files.revert）
      "cmd-r": "editor::RevertFile",

      "cmd-k cmd-u": "editor::ConvertToUpperCase",
      "cmd-k cmd-l": "editor::ConvertToLowerCase",

      "cmd-alt-[": "editor::Fold",
      "cmd-alt-]": "editor::UnfoldLines",

      "cmd-k cmd-1": ["editor::FoldAtLevel", { "level": 1 }],
      "cmd-k cmd-2": ["editor::FoldAtLevel", { "level": 2 }],
      "cmd-k cmd-3": ["editor::FoldAtLevel", { "level": 3 }],
      "cmd-k cmd-4": ["editor::FoldAtLevel", { "level": 4 }],
      "cmd-k cmd-5": ["editor::FoldAtLevel", { "level": 5 }],
      "cmd-k cmd-6": ["editor::FoldAtLevel", { "level": 6 }],
      "cmd-k cmd-7": ["editor::FoldAtLevel", { "level": 7 }],
      "cmd-k cmd-8": ["editor::FoldAtLevel", { "level": 8 }],
      "cmd-k cmd-9": ["editor::FoldAtLevel", { "level": 9 }],
      "cmd-k cmd-0": "editor::UnfoldAll",
      "cmd-k cmd-j": "editor::UnfoldAll"
    }
  },

  // ============================================================
  // PHP
  // ============================================================
  {
    "context": "Editor && language_name == PHP",
    "bindings": {
      "cmd-shift-c": ["editor::InsertSnippet", { "snippet": "echo '<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" /><pre>';\nvar_dump($0);\nexit();" }],
      "cmd-,": ["editor::InsertSnippet", { "snippet": "<?php$0" }],
      "cmd-shift-m": ["editor::InsertSnippet", { "snippet": "\\App\\Model\\" }],
      "cmd-ctrl-f": ["editor::InsertSnippet", { "snippet": "function($0) {}" }]
    }
  },

  // ============================================================
  // JavaScript / TypeScript
  // ============================================================
  {
    "context": "Editor && (language_name == JavaScript || language_name == TypeScript)",
    "bindings": {
      "cmd-shift-c": ["editor::InsertSnippet", { "snippet": "console.error($0);\nprocess.exit()\n" }],
      "cmd-ctrl-f": ["editor::InsertSnippet", { "snippet": "function($0) {}" }]
    }
  },
  {
    "context": "Editor && language_name == JavaScript",
    "bindings": {
      "cmd-p": ["editor::InsertSnippet", { "snippet": "new Promise((resolve, reject) => $0)" }]
    }
  },

  // ============================================================
  // Go
  // ============================================================
  {
    "context": "Editor && language_name == Go",
    "bindings": {
      "cmd-shift-c": ["editor::InsertSnippet", { "snippet": "_fmt.Println($0)" }]
    }
  },

  // ============================================================
  // CSS / SCSS 共用
  // ============================================================
  {
    "context": "Editor && (language_name == CSS || language_name == SCSS)",
    "bindings": {
      "cmd-l": ["editor::InsertSnippet", { "snippet": "background-color: rgba(0, 0, 255, 0.2);\n$0" }],
      "cmd-shift-c": ["editor::InsertSnippet", { "snippet": "border: 1px solid rgba(255, 0, 0, .3);\n$0" }],
      "cmd-i": ["editor::InsertSnippet", { "snippet": "@include $0;" }]
    }
  },

  // ============================================================
  // SCSS 專屬
  // ============================================================
  {
    "context": "Editor && language_name == SCSS",
    "bindings": {
      "cmd-e": ["editor::InsertSnippet", { "snippet": "@extend $0;" }],
      "cmd-o": ["editor::InsertSnippet", { "snippet": "@include opacity($0);" }],

      "cmd-shift-w": ["editor::InsertSnippet", { "snippet": "@include range-width($0);" }],
      "cmd-shift-r": ["editor::InsertSnippet", { "snippet": "@include border-radius($0);" }],
      "cmd-shift-j": ["editor::InsertSnippet", { "snippet": "@include transition($0 .3s);\n" }],
      "cmd-shift-o": ["editor::InsertSnippet", { "snippet": "@include overflow-docx3();" }],

      "cmd-shift-b": ["editor::InsertSnippet", { "snippet": "&:before {\n  $0\n}\n" }],
      "cmd-shift-a": ["editor::InsertSnippet", { "snippet": "&:after {\n  $0\n}\n" }],

      "cmd-.": ["editor::InsertSnippet", { "snippet": "display: inline-flex;\nflex-direction: row;\nalign-items: center;\njustify-content: flex-start;\n$0" }],
      "cmd-shift-.": ["editor::InsertSnippet", { "snippet": "display: inline-flex;\nflex-direction: column;\nalign-items: center;\njustify-content: flex-start;\n$0" }],
      "cmd-shift-g": ["editor::InsertSnippet", { "snippet": "flex-grow: 1;" }],
      "cmd-shift-s": ["editor::InsertSnippet", { "snippet": "flex-shrink: 0;" }]
    }
  }
]
