{
  "folders": [
    { "name": "🎯 Root", "path": "./" },
    { "name": "🔧 Backend", "path": "./backend" },
    { "name": "🎨 Frontend", "path": "./frontend" },
    { "name": "🗓️ docs", "path": "./docs" },
    { "name": "🔗 specs", "path": "./specs" }
  ],
  "settings": {
    // ========================================
    // EDITOR SETTINGS
    // ========================================

    "editor.fontSize": 15,
    "editor.lineHeight": 1.6,
    "editor.rulers": [80, 120],
    "editor.minimap.enabled": true,
    "editor.renderWhitespace": "boundary",
    "editor.bracketPairColorization.enabled": true,
    "editor.guides.bracketPairs": "active",
    "editor.smoothScrolling": true,
    "editor.cursorBlinking": "smooth",
    "editor.cursorSmoothCaretAnimation": "on",
    "editor.wordWrap": "on",
    "editor.linkedEditing": true,
    "editor.formatOnSave": true,
    "editor.formatOnPaste": true,
    "editor.suggestSelection": "first",
    "editor.tabSize": 2,
    "editor.detectIndentation": true,

    // ========================================
    // DEFAULT FORMATTER
    // ========================================

    "editor.defaultFormatter": "esbenp.prettier-vscode",

    "[javascript]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[javascriptreact]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[typescript]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[typescriptreact]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[json]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[jsonc]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[html]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[css]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[scss]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[markdown]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode",
      "editor.wordWrap": "on"
    },
    "[yaml]": {
      "editor.defaultFormatter": "redhat.vscode-yaml"
    },
    "[dockerfile]": {
      "editor.defaultFormatter": "dbaeumer.vscode-eslint"
    },
    "[sql]": {
      "editor.defaultFormatter": "mtxr.sqltools",
      "editor.tabSize": 2,
      "editor.insertSpaces": true
    },
    "sqltools.codelensLanguages": ["sql", ""],
    "sqltools.format": {
      "language": "sql",
      "params": {
        "keywordCase": "upper", // ทำให้ INSERT, VALUES เป็นตัวใหญ่
        "tabWidth": 2, // เยื้อง 3 ช่องว่าง (ปรับจาก 4 เป็น 3 เพื่อ match ตัวอย่าง)
        "expressionWidth": 80 // ความยาวสูงสุดต่อบรรทัดก่อนตีบรรทัดใหม่ (ป้องกันคอลัมน์แยกบรรทัด)
      }
    },
    "sqltools.formatOnSave": true,
    "sqltools.formatOnSaveLanguage": "sql",
    // ========================================
    // CODE ACTION ON SAVE
    // ========================================

    "editor.codeActionsOnSave": {
      "source.fixAll": "explicit",
      // "source.fixAll.eslint": "explicit"
      "source.organizeImports": "explicit",
      "source.addMissingImports": "explicit"
    },

    // ========================================
    // PRETTIER SETTINGS .prettierrc
    // ========================================

    // ========================================
    // ESLINT SETTINGS
    // ========================================

    "eslint.enable": true,
    "eslint.validate": [
      "javascript",
      "javascriptreact",
      "typescript",
      "typescriptreact"
    ],
    "eslint.alwaysShowStatus": true,
    "eslint.format.enable": false,
    "eslint.lintTask.enable": true,
    "eslint.workingDirectories": ["./backend", "./frontend"],
    // ========================================
    // PATH INTELLISENSE - ไม่มี src folder
    // ========================================

    "path-intellisense.mappings": {
      // Backend paths
      "@backend": "${workspaceFolder:🔧 Backend (NestJS)}/src",
      "@backend/*": "${workspaceFolder:🔧 Backend (NestJS)}/src/*",
      "@modules": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules",
      "@common": "${workspaceFolder:🔧 Backend (NestJS)}/src/common",
      "@config": "${workspaceFolder:🔧 Backend (NestJS)}/src/common/config",
      "@circulation": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/circulation",
      "@correspondence": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/correspondence",
      "@document-numbering": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/document-numbering",
      "@drawing": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/drawing",
      "@json-schema": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/json-schema",
      "@master": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/master",
      "@monitoring": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/monitoring",
      "@notification": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/notification",
      "@project": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/project",
      "@rfa": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/rfa",
      "@search": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/search",
      "@transmittal": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/transmittal",
      "@users": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/users",
      "@workflow-engine": "${workspaceFolder:🔧 Backend (NestJS)}/src/modules/workflow-engine",

      // Frontend paths (ไม่มี src)
      "@": "${workspaceFolder:🎨 Frontend (React/Next.js)}/app",
      "@/*": "${workspaceFolder:🎨 Frontend (React/Next.js)}/app/*",
      "@app": "${workspaceFolder:🎨 Frontend (React/Next.js)}/app",
      "@components": "${workspaceFolder:🎨 Frontend (React/Next.js)}/components",
      "@config": "${workspaceFolder:🎨 Frontend (React/Next.js)}/config",
      "@lib": "${workspaceFolder:🎨 Frontend (React/Next.js)}/lib",
      "@hooks": "${workspaceFolder:🎨 Frontend (React/Next.js)}/app/hooks",
      "@utils": "${workspaceFolder:🎨 Frontend (React/Next.js)}/utils",
      "@providers": "${workspaceFolder:🎨 Frontend (React/Next.js)}/providers",
      "@public": "${workspaceFolder:🎨 Frontend (React/Next.js)}/public",
      "@styles": "${workspaceFolder:🎨 Frontend (React/Next.js)}/styles",
      "@types": "${workspaceFolder:🎨 Frontend (React/Next.js)}/types",
      "@api": "${workspaceFolder:🎨 Frontend (React/Next.js)}/app/api"
    },
    "path-intellisense.autoSlashAfterDirectory": true,
    "path-intellisense.extensionOnImport": false,
    "path-intellisense.showHiddenFiles": false,

    // ========================================
    // ERROR LENS
    // ========================================

    "errorLens.enabled": true,
    "errorLens.enabledDiagnosticLevels": ["error", "warning"],
    "errorLens.padding": "0 1ch",
    "errorLens.messageTemplate": "$message",
    "errorLens.messageEnabled": true,

    // ========================================
    // TAILWIND CSS
    // ========================================

    "tailwindCSS.emmetCompletions": true,
    "tailwindCSS.colorDecorators": true,
    "tailwindCSS.suggestions": true,
    "tailwindCSS.includeLanguages": {
      "typescript": "javascript",
      "typescriptreact": "javascript"
    },
    "tailwindCSS.experimental.classRegex": [
      ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"],
      ["cn\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"],
      "class[Nn]ame\\s*=\\s*['\"`]([^'\"`]*)['\"`]"
    ],

    // ระบุที่ตั้งของ tailwind.config (ถ้ามี)
    "tailwindCSS.experimental.configFile": {
      //"backend/tailwind.config.js": "backend/**",
      "frontend/tailwind.config.ts": "frontend/**"
    },

    // ========================================
    // HEADWIND
    // ========================================

    "headwind.runOnSave": true,

    // ========================================
    // AUTO CLOSE/RENAME TAG
    // ========================================

    "auto-close-tag.activationOnLanguage": [
      "html",
      "xml",
      "javascript",
      "javascriptreact",
      "typescript",
      "typescriptreact"
    ],

    "auto-rename-tag.activationOnLanguage": [
      "html",
      "xml",
      "javascript",
      "javascriptreact",
      "typescript",
      "typescriptreact"
    ],

    // ========================================
    // BETTER COMMENTS
    // ========================================

    "better-comments.tags": [
      {
        "tag": "!",
        "color": "#FF2D00",
        "strikethrough": false,
        "backgroundColor": "transparent",
        "bold": true
      },
      {
        "tag": "?",
        "color": "#3498DB",
        "strikethrough": false,
        "backgroundColor": "transparent"
      },
      {
        "tag": "//",
        "color": "#474747",
        "strikethrough": true,
        "backgroundColor": "transparent"
      },
      {
        "tag": "todo",
        "color": "#FF8C00",
        "strikethrough": false,
        "backgroundColor": "transparent"
      },
      {
        "tag": "*",
        "color": "#98C379",
        "strikethrough": false,
        "backgroundColor": "transparent"
      }
    ],

    // ========================================
    // TODO TREE
    // ========================================

    "todo-tree.general.tags": [
      "TODO",
      "FIXME",
      "BUG",
      "HACK",
      "NOTE",
      "XXX",
      "[ ]",
      "[x]"
    ],
    "todo-tree.highlights.enabled": true,
    "todo-tree.tree.showScanModeButton": true,
    "todo-tree.filtering.excludeGlobs": [
      "**/node_modules",
      "**/dist",
      "**/build",
      "**/.next"
    ],
    "todo-tree.highlights.customHighlight": {
      "TODO": {
        "icon": "check",
        "iconColour": "#FF8C00",
        "foreground": "#FF8C00"
      },
      "FIXME": {
        "icon": "alert",
        "iconColour": "#FF2D00",
        "foreground": "#FF2D00"
      },
      "BUG": {
        "icon": "bug",
        "iconColour": "#FF2D00",
        "foreground": "#FF2D00"
      },
      "NOTE": {
        "icon": "note",
        "iconColour": "#3498DB",
        "foreground": "#3498DB"
      },
      "HACK": {
        "icon": "tools",
        "iconColour": "#FFA500",
        "foreground": "#FFA500"
      }
    },

    // ========================================
    // GITLENS
    // ========================================

    "gitlens.statusBar.enabled": true,
    "gitlens.currentLine.enabled": true,
    "gitlens.currentLine.format": "${author}, ${agoOrDate}",
    "gitlens.codeLens.enabled": true,
    "gitlens.codeLens.authors.enabled": false,
    "gitlens.codeLens.recentChange.enabled": true,
    "gitlens.hovers.enabled": true,
    "gitlens.blame.format": "${author|10} ${agoOrDate|14-}",
    "gitlens.blame.highlight.enabled": false,
    "gitlens.views.repositories.location": "scm",
    "gitlens.views.fileHistory.location": "explorer",
    "gitlens.views.lineHistory.location": "explorer",

    // ========================================
    // GIT
    // ========================================

    "git.enabled": true,
    "git.autofetch": true,
    "git.autofetchPeriod": 180,
    "git.confirmSync": false,
    "git.enableSmartCommit": true,
    "git.postCommitCommand": "none",
    "git.untrackedChanges": "separate",
    "git.openRepositoryInParentFolders": "always",

    // ========================================
    // IMPORT COST
    // ========================================

    "importCost.showCalculatingDecoration": true,
    "importCost.largePackageSize": 100,
    "importCost.mediumPackageSize": 50,
    "importCost.smallPackageSize": 20,
    "importCost.largePackageColor": "#FF2D00",
    "importCost.mediumPackageColor": "#FF8C00",
    "importCost.smallPackageColor": "#98C379",

    // ========================================
    // JAVASCRIPT/TYPESCRIPT
    // ========================================

    "javascript.suggest.autoImports": true,
    "javascript.updateImportsOnFileMove.enabled": "always",
    "javascript.inlayHints.parameterNames.enabled": "all",
    "javascript.inlayHints.functionLikeReturnTypes.enabled": true,
    "javascript.inlayHints.variableTypes.enabled": true,
    "javascript.preferences.importModuleSpecifier": "relative",

    "typescript.suggest.autoImports": true,
    "typescript.updateImportsOnFileMove.enabled": "always",
    "typescript.inlayHints.parameterNames.enabled": "all",
    "typescript.inlayHints.functionLikeReturnTypes.enabled": true,
    "typescript.inlayHints.variableTypes.enabled": false,
    "typescript.inlayHints.propertyDeclarationTypes.enabled": true,
    "typescript.preferences.importModuleSpecifier": "relative",
    "typescript.tsdk": "node_modules/typescript/lib",

    // ========================================
    // EMMET
    // ========================================

    "emmet.includeLanguages": {
      "javascript": "javascriptreact",
      "typescript": "typescriptreact"
    },
    "emmet.triggerExpansionOnTab": true,
    "emmet.showSuggestionsAsSnippets": true,

    // ========================================
    // FILES
    // ========================================

    //"files.autoSave": "onFocusChange",
    "files.trimTrailingWhitespace": true,
    "files.insertFinalNewline": true,
    "files.encoding": "utf8",
    "files.eol": "\n",
    "files.associations": {
      "*.css": "tailwindcss",
      ".env*": "dotenv",
      "*.md": "markdown"
    },

    "files.exclude": {
      "**/.git": true,
      "**/.DS_Store": true,
      "**/node_modules": true,
      "**/.next": true,
      "**/dist": true,
      "**/build": true,
      "**/.turbo": true,
      "**/coverage": true,
      "**/.nyc_output": true,
      "**/*.log": true
    },

    "files.watcherExclude": {
      "**/.git/objects/**": true,
      "**/.git/subtree-cache/**": true,
      "**/node_modules/**": true,
      "**/.next/**": true,
      "**/dist/**": true,
      "**/build/**": true,
      "**/.turbo/**": true
    },

    // ========================================
    // SEARCH
    // ========================================

    "search.exclude": {
      "**/node_modules": true,
      "**/dist": true,
      "**/build": true,
      "**/.next": true,
      "**/.turbo": true,
      "**/coverage": true,
      "**/.nyc_output": true,
      "**/yarn.lock": true,
      "**/package-lock.json": true,
      "**/pnpm-lock.yaml": true,
      "**/*.log": true
    },
    "search.followSymlinks": false,
    "search.useIgnoreFiles": true,
    "search.smartCase": true,

    // ========================================
    // TERMINAL
    // ========================================

    "terminal.integrated.fontSize": 15,
    "terminal.integrated.lineHeight": 1.2,
    "terminal.integrated.smoothScrolling": true,
    "terminal.integrated.cursorBlinking": true,
    "terminal.integrated.fontFamily": "MesloLGS NF, Consolas, monospace",
    "terminal.integrated.profiles.windows": {
      "PowerShell-7": {
        "path": "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
        "icon": "terminal-powershell"
      }
    },
    "terminal.integrated.defaultProfile.windows": "PowerShell-7",
    "terminal.integrated.cwd": "${workspaceFolder}",

    // ========================================
    // WORKBENCH
    // ========================================

    "workbench.iconTheme": "material-icon-theme",
    "workbench.activityBar.location": "default",
    "workbench.tree.indent": 15,
    "workbench.list.smoothScrolling": true,
    "workbench.editor.enablePreview": false,
    "workbench.editor.limit.enabled": true,
    "workbench.editor.limit.value": 10,
    "workbench.startupEditor": "welcomePage",
    "workbench.colorCustomizations": {
      "[One Dark Pro]": {
        "activityBarBadge.background": "#FF8C00",
        "list.activeSelectionForeground": "#FF8C00",
        "list.inactiveSelectionForeground": "#FF8C00",
        "list.highlightForeground": "#FF8C00",
        "scrollbarSlider.activeBackground": "#FF8C0050",
        "editorSuggestWidget.highlightForeground": "#FF8C00",
        "textLink.foreground": "#FF8C00"
      }
    },
    // ========================================
    // EXPLORER
    // ========================================

    "explorer.compactFolders": false,
    "explorer.confirmDelete": true,
    "explorer.confirmDragAndDrop": false,
    "explorer.sortOrder": "type",
    "explorer.fileNesting.enabled": true,
    "explorer.fileNesting.expand": false,
    "explorer.fileNesting.patterns": {
      "package.json": "package-lock.json, yarn.lock, pnpm-lock.yaml, .npmrc",
      "tsconfig.json": "tsconfig.*.json",
      ".env": ".env.*",
      "docker-compose.yml": "docker-compose.*.yml, Dockerfile*",
      "*.ts": "${capture}.test.ts, ${capture}.spec.ts",
      "*.tsx": "${capture}.test.tsx, ${capture}.spec.tsx, ${capture}.module.css",
      "*.js": "${capture}.test.js, ${capture}.spec.js",
      "*.jsx": "${capture}.test.jsx, ${capture}.spec.jsx"
    },

    // ========================================
    // BREADCRUMBS
    // ========================================

    "breadcrumbs.enabled": true,
    "breadcrumbs.filePath": "on",
    "breadcrumbs.symbolPath": "on",

    // ========================================
    // JEST
    // ========================================

    // เปิดใช้งาน Jest extension
    "jest.enable": true,

    // ปิดการเปิด Terminal ตอนเปิด VS Code
    "jest.showTerminalOnLaunch": false,

    // ปิดการเปิด Terminal ตอนรันเทสต์
    "jest.showTerminalOnTestRun": false,

    // ให้รัน Jest ใน background โดยไม่ต้องเปิด terminal
    "jest.runInWorkspace": true,

    // แสดงผลลัพธ์เทสต์ใน editor (inline)
    "jest.showInlineError": true,

    // ใช้ watch mode สำหรับการรันเทสต์อัตโนมัติเมื่อไฟล์เปลี่ยน
    "jest.runMode": "watch",

    // กำหนด path ของ Jest ถ้าใช้ local install
    "jest.pathToJest": "node_modules/.bin/jest",

    // กำหนด config ของ Jest ถ้ามีไฟล์ jest.config.js
    "jest.pathToConfig": "jest.config.js",

    "jest.disabledWorkspaceFolders": ["🎯 Root", "🗓️ docs", "🔗 specs"],

    // ========================================
    // DOCKER
    // ========================================

    "docker.languageserver.formatter.ignoreMultilineInstructions": true,
    "docker.showStartPage": false,

    // ========================================
    // YAML
    // ========================================

    "yaml.schemas": {
      "https://json.schemastore.org/github-workflow.json": ".github/workflows/*.{yml,yaml}",
      "https://json.schemastore.org/github-action.json": "action.{yml,yaml}",
      "https://json.schemastore.org/prettierrc.json": ".prettierrc.{yml,yaml}",
      "https://json.schemastore.org/docker-compose.json": "docker-compose*.{yml,yaml}"
    },
    "yaml.format.enable": true,
    "yaml.format.singleQuote": false,
    "yaml.format.bracketSpacing": true,
    "yaml.validate": true,
    "yaml.hover": true,
    "yaml.completion": true,

    // ========================================
    // REST CLIENT
    // ========================================

    "rest-client.timeoutinmilliseconds": 30000,
    "rest-client.showResponseInDifferentTab": true,
    "rest-client.environmentVariables": {
      "$shared": {
        "apiUrl": "http://localhost:3000"
      },
      "development": {
        "apiUrl": "http://localhost:3000"
      },
      "production": {
        "apiUrl": "https://lcbp3.nap-dms.work"
      }
    },

    // ========================================
    // CONSOLE NINJA
    // ========================================

    "console-ninja.featureSet": "Community",
    "console-ninja.toolsToEnableSupportAutomaticallyFor": {
      "live-server-extension": true,
      "live-preview-extension": true
    },

    // ========================================
    // MATERIAL ICON THEME
    // ========================================

    "material-icon-theme.folders.theme": "specific",
    "material-icon-theme.folders.color": "#90a4ae",
    "material-icon-theme.files.associations": {
      "*.env.local": "Tune",
      "*.env.development": "Tune",
      "*.env.production": "Tune",
      "docker-compose.*.yml": "Docker"
    },
    "material-icon-theme.folders.associations": {
      "hooks": "Custom",
      "utils": "Helper",
      "lib": "Library",
      "components": "Components",
      "api": "Api",
      "dto": "Class",
      "entities": "Database",
      "modules": "Folder-Controllers",
      "common": "Shared",
      "config": "Config"
    },

    // ========================================
    // NPM INTELLISENSE
    // ========================================

    "npm-intellisense.importES6": true,
    "npm-intellisense.importQuotes": "'",
    "npm-intellisense.importLinebreak": ";\n",
    "npm-intellisense.importDeclarationType": "const",

    // ========================================
    // PERFORMANCE
    // ========================================

    "files.maxMemoryForLargeFilesMB": 4096,
    "telemetry.telemetryLevel": "off",
    "security.workspace.trust.untrustedFiles": "open",
    "extensions.ignoreRecommendations": false,
    // ========================================
    // DEBUGGING
    // ========================================

    "debug.console.fontSize": 13,
    "debug.console.lineHeight": 1.2,
    "debug.internalConsoleOptions": "openOnSessionStart",
    "debug.openDebug": "openOnDebugBreak",
    "debug.showBreakpointsInOverviewRuler": true,
    "prettier.configPath": "./.prettierrc",
    "sqltools.connections": [
      {
        "name": "MariaDB",
        "server": "localhost",
        "port": 3306,
        "user": "root",
        "password": "",
        "database": "lcbp3"
      }
    ]
  },

  // ========================================
  // LAUNCH CONFIGURATIONS
  // ========================================

  "launch": {
    "version": "0.2.0",
    "configurations": [
      {
        "name": "🔧 Debug Backend",
        "type": "node",
        "request": "launch",
        "runtimeExecutable": "npm",
        "runtimeArgs": ["run", "start:debug"],
        "cwd": "${workspaceFolder:🔧 Backend}",
        "console": "integratedTerminal",
        "internalConsoleOptions": "neverOpen",
        "skipFiles": ["<node_internals>/**"],
        "sourceMaps": true,
        "restart": true
      },
      {
        "name": "🎨 Debug Frontend",
        "type": "chrome",
        "request": "launch",
        "url": "http://localhost:3000",
        "webRoot": "${workspaceFolder:🎨 Frontend}",
        "sourceMapPathOverrides": {
          "webpack:///./*": "${webRoot}/*"
        }
      },
      {
        "name": "🧪 Debug Jest Tests (Backend)",
        "type": "node",
        "request": "launch",
        "runtimeExecutable": "npm",
        "runtimeArgs": ["run", "test:debug"],
        "cwd": "${workspaceFolder:🔧 Backend}",
        "console": "integratedTerminal",
        "internalConsoleOptions": "neverOpen"
      },
      {
        "name": "🧪 Debug Jest Tests (Frontend)",
        "type": "node",
        "request": "launch",
        "runtimeExecutable": "npm",
        "runtimeArgs": ["run", "test:debug"],
        "cwd": "${workspaceFolder:🎨 Frontend}",
        "console": "integratedTerminal",
        "internalConsoleOptions": "neverOpen"
      }
    ],
    "compounds": [
      {
        "name": "🚀 Debug Full Stack",
        "configurations": ["🔧 Debug Backend", "🎨 Debug Frontend"],
        "stopAll": true
      }
    ]
  },

  // ========================================
  // TASKS
  // ========================================

  "tasks": {
    "version": "2.0.0",
    "tasks": [
      {
        "label": "🔧 Start Backend Dev",
        "type": "npm",
        "script": "start:dev",
        "path": "backend/",
        "problemMatcher": [],
        "presentation": {
          "reveal": "always",
          "panel": "dedicated",
          "group": "dev"
        }
      },
      {
        "label": "🎨 Start Frontend Dev",
        "type": "npm",
        "script": "dev",
        "path": "frontend/",
        "problemMatcher": [],
        "presentation": {
          "reveal": "always",
          "panel": "dedicated",
          "group": "dev"
        }
      },
      {
        "label": "🚀 Start Full Stack",
        "dependsOn": ["🔧 Start Backend Dev", "🎨 Start Frontend Dev"],
        "problemMatcher": []
      },
      {
        "label": "🧪 Run Backend Tests",
        "type": "npm",
        "script": "test",
        "path": "backend/",
        "problemMatcher": []
      },
      {
        "label": "🧪 Run Frontend Tests",
        "type": "npm",
        "script": "test",
        "path": "frontend/",
        "problemMatcher": []
      },
      {
        "label": "🏗️ Build Backend",
        "type": "npm",
        "script": "build",
        "path": "backend/",
        "problemMatcher": ["$tsc"],
        "group": {
          "kind": "build",
          "isDefault": false
        }
      },
      {
        "label": "🏗️ Build Frontend",
        "type": "npm",
        "script": "build",
        "path": "frontend/",
        "problemMatcher": ["$tsc"],
        "group": {
          "kind": "build",
          "isDefault": false
        }
      },
      {
        "label": "🔍 Lint Backend",
        "type": "npm",
        "script": "lint",
        "path": "backend/",
        "problemMatcher": ["$eslint-stylish"]
      },
      {
        "label": "🔍 Lint Frontend",
        "type": "npm",
        "script": "lint",
        "path": "frontend/",
        "problemMatcher": ["$eslint-stylish"]
      },
      {
        "label": "🐳 Docker Compose Up",
        "type": "shell",
        "command": "docker-compose up -d",
        "problemMatcher": []
      },
      {
        "label": "🐳 Docker Compose Down",
        "type": "shell",
        "command": "docker-compose down",
        "problemMatcher": []
      },
      {
        "label": "Start Backend",
        "type": "shell",
        "command": "npm run start:dev",
        "options": {
          "cwd": "${workspaceFolder:🔧 Backend}"
        },
        "presentation": {
          "panel": "dedicated",
          "group": "dev",
          "reveal": "always"
        }
      },
      // 1. Task หลักที่จะรันอัตโนมัติเมื่อเปิดโปรแกรม
      {
        "label": "🚀 Setup Workspace",
        "dependsOn": ["🔧 PS: Backend", "🎨 PS: Frontend"], // สั่งให้รัน 2 task ย่อย
        "runOptions": {
          "runOn": "folderOpen" // <--- คำสั่งศักดิ์สิทธิ์: รันทันทีที่เปิด VS Code
        },
        "presentation": {
          "reveal": "never" // ไม่ต้องโชว์หน้าต่างของตัวคุมหลัก
        },
        "problemMatcher": []
      },

      // 2. Task ย่อย: เปิด Terminal ที่ Backend
      {
        "label": "🔧 PS: Backend",
        "type": "shell",
        "command": "powershell", // สั่งเปิด PowerShell ค้างไว้
        "options": {
          "cwd": "${workspaceFolder:🔧 Backend}" // cd เข้า folder นี้
        },
        "isBackground": true, // บอก VS Code ว่าไม่ต้องรอให้จบ (รันค้างไว้เลย)
        "problemMatcher": [],
        "presentation": {
          "group": "workspace-terminals", // จัดกลุ่มเดียวกัน
          "reveal": "always",
          "panel": "dedicated", // แยก Tab ให้ชัดเจน
          "focus": false // ไม่ต้องแย่ง Focus ทันที
        }
      },

      // 3. Task ย่อย: เปิด Terminal ที่ Frontend
      {
        "label": "🎨 PS: Frontend",
        "type": "shell",
        "command": "powershell",
        "options": {
          "cwd": "${workspaceFolder:🎨 Frontend}" // cd เข้า folder นี้
        },
        "isBackground": true,
        "problemMatcher": [],
        "presentation": {
          "group": "workspace-terminals",
          "reveal": "always",
          "panel": "dedicated",
          "focus": true // ให้ Focus ที่อันนี้เป็นอันสุดท้าย (พร้อมพิมพ์)
        }
      }
    ]
  },

  // ========================================
  // EXTENSIONS
  // ========================================

  "extensions": {
    "recommendations": [
      "dbaeumer.vscode-eslint",
      "esbenp.prettier-vscode",
      "usernamehw.errorlens",
      "yoavbls.pretty-typescript-errors",
      "wix.vscode-import-cost",
      "aaron-bond.better-comments",
      "gruntfuggly.todo-tree",
      "ashinzekene.nestjs",
      "dsznajder.es7-react-js-snippets",
      "orta.vscode-jest",
      "bradlc.vscode-tailwindcss",
      "heybourn.headwind",
      "prisma.prisma",
      "rangav.vscode-thunder-client",
      "humao.rest-client",
      "formulahendry.auto-close-tag",
      "formulahendry.auto-rename-tag",
      "ms-azuretools.vscode-docker",
      "mtxr.sqltools",
      "redhat.vscode-yaml",
      "mikestead.dotenv",
      "editorconfig.editorconfig",
      "eamodio.gitlens",
      "mhutchie.git-graph",
      "vivaxy.vscode-conventional-commits",
      "christian-kohler.path-intellisense",
      "christian-kohler.npm-intellisense",
      "pranaygp.vscode-css-peek",
      "alefragnani.bookmarks",
      "chakrounanas.turbo-console-log",
      "wallabyjs.console-ninja",
      "pkief.material-icon-theme",
      "github.copilot",
      "inferrinizzard.prettier-sql-vscode"
    ]
  }
}
