export const gameConfig = {
  gameId: "automato_code_editor",
  type: "code",
  icon: "🤖",
  gameName: "Autômato com Código",
  descricao:
    "Aprenda programação navegando por labirintos com código Javascript",
  categoria: "Lógica",
  tempoEstimado: "15-30 min",
  dificuldade: "Intermediário",
  conceitos: [
    "Sequências",
    "Loops/Repetição",
    "Condicionais",
    "Estruturas de controle",
  ],
  route: "/games/automato_code_editor",
  component: "AutomatoGame",
  ativo: true,
  destaque: true,
  prdReady: false,
  obetivos: [
    "Entender sequências de comandos",
    "Usar loops para otimizar código",
    "Aplicar condicionais para tomada de decisão",
    "Resolver problemas de navegação",
  ],
  metadata: {
    ultimaAtualizacao: "2025-09-07",
    versao: "1.0.0",
  },
  allowedFunctions: [
    "moverParaFrente",
    "virarEsquerda",
    "virarDireita",
    "haCaminho",
    "chegouNoAlvo",
  ],
  allowedControlStructures: ["if", "else", "while", "var"],
  functionDocumentation: {
    moverParaFrente: {
      description: "Move o autômato uma posição para frente",
      syntax: "moverParaFrente()",
      returns: "void",
      example: "moverParaFrente();",
    },
    virarEsquerda: {
      description: "Vira o autômato 90° para a esquerda",
      syntax: "virarEsquerda()",
      returns: "void",
      example: "virarEsquerda();",
    },
    virarDireita: {
      description: "Vira o autômato 90° para a direita",
      syntax: "virarDireita()",
      returns: "void",
      example: "virarDireita();",
    },
    haCaminho: {
      description: "Verifica se há um caminho livre na direção especificada",
      syntax: "haCaminho(direcao)",
      parameters: ['direcao: "frente" | "esquerda" | "direita"'],
      returns: "boolean",
      example:
        'if (haCaminho("frente")) {\n //informe o código que será executado aqui \n }',
    },
    chegouNoAlvo: {
      description: "Verifica se o autômato chegou ao objetivo",
      syntax: "chegouNoAlvo()",
      returns: "boolean",
      example:
        "while (!chegouNoAlvo()) {\n //informe o código que será executado aqui;\n }",
    },
  },
  fases: [
    {
      id: 1,
      nome: "Primeiro Passo",
      descricao: "Aprenda a mover para frente",
      maxBlocks: Infinity,
      startPosition: { x: 3, y: 4 },
      allowedBlocks: ["moveForward"],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0],
        [0, 0, 2, 1, 3, 0, 0],
        [0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0],
      ],
      initialCode: `// Use a função moverParaFrente() para chegar ao alvo`,
    },
    {
      id: 2,
      nome: "Primeira Curva",
      descricao: "Aprenda a virar à direita",
      maxBlocks: Infinity,
      startPosition: { x: 2, y: 4 },
      allowedBlocks: ["moveForward", "turnRight"],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 2, 1, 0, 0, 0],
        [0, 0, 0, 0, 1, 0, 0, 0],
        [0, 0, 0, 0, 3, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
      ],
      initialCode: `// Use moverParaFrente() e virarDireita() para chegar ao alvo`,
    },
    {
      id: 3,
      nome: "Vire para todos os lados",
      descricao: "Aprenda a virar em todas as direções",
      maxBlocks: Infinity,
      startPosition: { x: 2, y: 4 },
      allowedBlocks: ["moveForward", "turnLeft", "turnRight"],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 2, 1, 0, 0, 0],
        [0, 0, 0, 0, 1, 0, 0, 0],
        [0, 0, 0, 0, 1, 1, 3, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
      ],
      initialCode: `// Aprenda um movimento novo: virarEsquerda()`,
    },
    {
      id: 4,
      nome: "Linha Reta",
      descricao: "Use repetição para economizar blocos",
      maxBlocks: 2,
      startPosition: { x: 1, y: 4 },
      allowedBlocks: [
        "moveForward",
        "turnLeft",
        "turnRight",
        "automato_repeat_until_goal",
      ],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 2, 1, 1, 1, 1, 3, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
      ],
      initialCode: `// Aplique a repetição "while" e use a condicional chegouNoAlvo() para repetir os comandos.`,
    },
    {
      id: 5,
      nome: "Escadaria",
      descricao: "Navegue pela escadaria diagonal",
      maxBlocks: 5,
      startPosition: { x: 1, y: 6 },
      allowedBlocks: [
        "moveForward",
        "turnLeft",
        "turnRight",
        "automato_repeat_until_goal",
      ],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0, 1],
        [0, 0, 0, 0, 0, 0, 1, 1],
        [0, 0, 0, 0, 0, 3, 1, 0],
        [0, 0, 0, 0, 1, 1, 0, 0],
        [0, 0, 0, 1, 1, 0, 0, 0],
        [0, 0, 1, 1, 0, 0, 0, 0],
        [0, 2, 1, 0, 0, 0, 0, 0],
        [1, 1, 0, 0, 0, 0, 0, 0],
      ],
      initialCode: `// Use repetição e todas as funções que aprendeu até agora para economizar blocos.`,
    },
    {
      id: 6,
      nome: "Torre",
      descricao: "Suba a torre",
      maxBlocks: 5,
      startPosition: { x: 3, y: 6 },
      allowedBlocks: [
        "moveForward",
        "turnLeft",
        "turnRight",
        "automato_repeat_until_goal",
      ],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 3, 0, 0],
        [0, 0, 0, 0, 0, 1, 0, 0],
        [0, 0, 0, 0, 0, 1, 0, 0],
        [0, 0, 0, 0, 0, 1, 0, 0],
        [0, 0, 0, 1, 1, 1, 0, 0],
        [0, 0, 2, 1, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
      ],
      initialCode: `// Use comandos avulsos e repetição para superar esse desafio.`,
    },
    {
      id: 7,
      nome: "Caminho em Bloco",
      descricao: "Use condicionais - verifique se há caminho à frente",
      maxBlocks: 5,
      startPosition: { x: 1, y: 6 },
      allowedBlocks: [
        "moveForward",
        "turnLeft",
        "turnRight",
        "automato_repeat_until_goal",
        "automato_if",
      ],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 1, 1, 1, 1, 1, 0, 0],
        [0, 1, 0, 0, 0, 1, 0, 0],
        [0, 1, 1, 3, 0, 1, 0, 0],
        [0, 0, 0, 0, 0, 1, 0, 0],
        [0, 2, 1, 1, 1, 1, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
      ],
      initialCode: `// Use a condicional "if" e a função haCaminho() para verificar se existe o caminho a frente:
// exemplo: 
//
//if (haCaminho("frente")) {
// moverParaFrente();
//}
//
// Use haCaminho("esquerda") e haCaminho("direita") para verificar os outros lados`,
    },
    {
      id: 8,
      nome: "Labirinto Ramificado",
      descricao:
        "Navegue por caminhos que se ramificam - use condicionais gerais",
      maxBlocks: 10,
      startPosition: { x: 1, y: 2 },
      allowedBlocks: [
        "moveForward",
        "turnLeft",
        "turnRight",
        "automato_repeat_until_goal",
        "automato_if",
      ],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 1, 1, 1, 1, 1, 0],
        [0, 2, 1, 0, 0, 1, 0, 0],
        [0, 0, 0, 1, 1, 1, 1, 0],
        [0, 1, 1, 3, 0, 1, 0, 0],
        [0, 0, 0, 1, 0, 1, 0, 0],
        [0, 1, 1, 1, 1, 1, 1, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
      ],
      initialCode: `// Use a condicional "if" e a função haCaminho() para verificar se existe o caminho a frente:
// exemplo: 
//
//if (haCaminho("frente")) {
// moverParaFrente();
//}
//
// Use haCaminho("esquerda") e haCaminho("direita") para verificar os outros lados`,
    },
    {
      id: 9,
      nome: "Caminho Complexo",
      descricao: "Um labirinto mais desafiador",
      maxBlocks: 7,
      startPosition: { x: 1, y: 6 },
      allowedBlocks: [
        "moveForward",
        "turnLeft",
        "turnRight",
        "automato_repeat_until_goal",
        "automato_if",
      ],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 1, 1, 1, 1, 0, 0, 0],
        [0, 1, 0, 0, 1, 1, 0, 0],
        [0, 1, 1, 1, 0, 1, 0, 0],
        [0, 0, 0, 1, 0, 1, 0, 0],
        [0, 2, 1, 1, 0, 3, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
      ],
    },
    {
      id: 10,
      nome: "Labirinto Avançado",
      descricao: "Use todas suas habilidades - agora com condicionais if/else",
      maxBlocks: 10,
      startPosition: { x: 5, y: 6 },
      allowedBlocks: [
        "moveForward",
        "turnLeft",
        "turnRight",
        "automato_repeat_until_goal",
        "automato_if",
        "automato_ifElse",
      ],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 1, 1, 1, 1, 1, 0, 0],
        [0, 0, 1, 0, 0, 0, 0, 0],
        [3, 1, 1, 1, 1, 1, 1, 0],
        [0, 1, 0, 1, 0, 1, 1, 0],
        [1, 1, 1, 1, 1, 0, 1, 0],
        [0, 1, 0, 1, 0, 2, 1, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
      ],
      initialCode: `// Você pode ter estruturas de if/else mais complexas:
//exemplo:
//if (haCaminho("frente")) {
//  moverParaFrente();
//} else if (haCaminho("esquerda")) {
//    virarEsquerda();
//  } else {
//      virarDireita();
//    }
`,
    },
    {
      id: 11,
      nome: "Desafio Final",
      descricao: "O último desafio - use tudo que aprendeu!",
      maxBlocks: 10,
      startPosition: { x: 1, y: 6 },
      allowedBlocks: [
        "moveForward",
        "turnLeft",
        "turnRight",
        "automato_repeat_until_goal",
        "automato_if",
        "automato_ifElse",
      ],
      mapa: [
        [0, 0, 0, 0, 0, 0, 0, 0],
        [0, 1, 1, 0, 3, 0, 1, 0],
        [0, 1, 1, 0, 1, 1, 1, 0],
        [0, 1, 0, 1, 0, 1, 0, 0],
        [0, 1, 1, 1, 1, 1, 1, 0],
        [0, 0, 0, 1, 0, 0, 1, 0],
        [0, 2, 1, 1, 1, 0, 1, 0],
        [0, 0, 0, 0, 0, 0, 0, 0],
      ],
      initialCode: `// Este é o desafio final! Use tudo que aprendeu para chegar ao objetivo. Boa sorte!`,
    },
  ],

  SquareType: {
    WALL: 0,
    OPEN: 1,
    START: 2,
    FINISH: 3,
  },

  DirectionType: {
    NORTH: 0,
    EAST: 1,
    SOUTH: 2,
    WEST: 3,
  },

  BlockColors: {
    MOVEMENT: 290, // Roxo para movimento
    LOOPS: 120, // Verde para loops
    LOGIC: 210, // Azul para lógica
  },
};
