{
  "schemaVersion": 1,
  "atomId": "solitaire.aigameplay",
  "bundleType": "aigameplay",
  "category": "gameplay",
  "mode": "fixed",
  "label": {
    "zh": "纸牌接龙玩法",
    "en": "Klondike Solitaire gameplay"
  },
  "tags": [
    "gameplay",
    "solitaire",
    "cards",
    "puzzle",
    "klondike",
    "casual"
  ],
  "bindingRoles": [
    "gameplayRule"
  ],
  "imports": [
    {
      "slot": "engine",
      "pinAtomId": "phaser.aicomponent",
      "edgeKind": "requires",
      "bindAs": "engine"
    },
    {
      "slot": "bgMusic",
      "description": "背景循环音乐",
      "bindAs": "bgm",
      "required": false,
      "edgeKind": "compatibleWith",
      "matchBindingRoles": [
        "bgMusic"
      ],
      "allowedBundleTypes": [
        "aiaudio"
      ],
      "constraints": {
        "loop": true
      }
    },
    {
      "slot": "cardSet",
      "description": "扑克牌面贴图集",
      "bindAs": "cards",
      "required": false,
      "edgeKind": "compatibleWith",
      "matchBindingRoles": [
        "tileTextureSet"
      ],
      "allowedBundleTypes": [
        "aiimage"
      ]
    },
    {
      "slot": "tutorial",
      "description": "新手引导浮层",
      "bindAs": "tutorial",
      "required": false,
      "edgeKind": "compatibleWith",
      "matchBindingRoles": [
        "tutorialOverlay"
      ],
      "allowedBundleTypes": [
        "aicomponent"
      ]
    },
    {
      "slot": "winPanel",
      "description": "通关反馈面板视觉",
      "bindAs": "winPanel",
      "required": false,
      "edgeKind": "compatibleWith",
      "matchBindingRoles": [
        "successFeedbackPanel"
      ],
      "allowedBundleTypes": [
        "aiimage"
      ]
    },
    {
      "slot": "losePanel",
      "description": "失败反馈面板视觉",
      "bindAs": "losePanel",
      "required": false,
      "edgeKind": "compatibleWith",
      "matchBindingRoles": [
        "failFeedbackPanel"
      ],
      "allowedBundleTypes": [
        "aiimage"
      ]
    },
    {
      "slot": "endScreen",
      "description": "可玩广告结算屏（含 CTA 按钮）",
      "bindAs": "endScreen",
      "required": false,
      "edgeKind": "compatibleWith",
      "matchBindingRoles": [
        "playableEndScreenLayout"
      ],
      "allowedBundleTypes": [
        "aicomponent"
      ]
    }
  ],
  "generation": {
    "kind": "pgs",
    "pgsVersion": "1.0",
    "gameplayType": "solitaire",
    "rules": {
      "tableauColumns": 7,
      "foundationPiles": 4,
      "drawCount": 1,
      "stockRecycleLimit": -1
    }
  },
  "result": {
    "outputFile": "reducer.ts",
    "format": "typescript",
    "constraints": {
      "testCasesMustPass": true
    }
  },
  "binding": {
    "role": "gameplayRule",
    "target": "game/gameplay/solitaire/reducer.ts",
    "type": "gameplay-module-reference",
    "constraints": {
      "interface": [
        "init(config)",
        "dispatch(action)",
        "getState()",
        "canMoveToTableau(state, card, targetCol)",
        "canMoveToFoundation(state, card)",
        "moveCards(state, from, to, count)",
        "drawFromStock(state)",
        "getValidMoves(state)"
      ]
    }
  },
  "files": {
    "skill": "SKILL.md",
    "pgsSchema": "ref/pgs-schema.json",
    "reducerTemplate": "ref/reducer.template.ts"
  }
}
