/**
 * @fileoverview Utility module for config.js
 * 
 * @module games.turtle.config.config
 */

export const gameConfig = {
  gameId: "turtle",
  gameName: "Tartaruga",
  descricao: "Aprenda a programar criando desenhos incríveis com a Tartaruga!",
  type: "blocks",
  icon: "🐢",
  thumbnail: "/images/atividades/programacao/turtle-thumbnail.png",
  dificuldade: "Iniciante",
  categoria: "Lógica",
  tempoEstimado: "60-120 min",
  conceitos: ["Movimento", "Repetição", "Funções"],
  route: "/atividades/programacao/turtle",
  component: "TurtleGame",
  objetivos: [
    "Entender sequências de comandos",
    "Usar loops para otimar código",
    "Criar e usar funções",
  ],
  metadata: {
    lastUpdated: "2026-01-05",
    version: "1.1.0",
  },
  mensagens: {
    semDesenho:
      "Você não desenhou nada! Certifique-se de usar os comandos de movimento com a caneta abaixada.",
    desenhoNaoConfere:
      "O desenho não está correto. Verifique a forma, posição e cores.",
    erroGeral: "Algo deu errado durante a execução. Verifique seu código.",
    sucessoGenerico: "Parabéns! Você completou o desafio!",
    timeoutExcedido:
      "O tempo de execução foi excedido. Verifique se não há loops infinitos.",
  },
  functionDocumentation: {
    move: {
      description: "Move a tartaruga para frente (positivo) ou trás (negativo)",
      syntax: "move(distância)",
      parameters: [
        "distância: number - Pixels para mover (positivo=frente, negativo=trás)",
      ],
      returns: "void",
      example: "move(100);",
    },
    turn: {
      description: "Vira a tartaruga. Positivo = esquerda, Negativo = direita",
      syntax: "turn(ângulo)",
      parameters: [
        "ângulo: number - Graus para virar (positivo=esquerda, negativo=direita)",
      ],
      returns: "void",
      example: "turn(90);",
    },
    penDown: {
      description:
        "Controla se a caneta está abaixada (desenha) ou levantada (não desenha)",
      syntax: "penDown(estado)",
      parameters: [
        "estado: boolean - true para desenhar, false para não desenhar",
      ],
      returns: "void",
      example: "penDown(true);",
    },
    penColour: {
      description: "Define a cor da caneta para desenhar",
      syntax: "penColour(cor)",
      parameters: [
        'cor: string - Cor em hexadecimal (#ff0000) ou nome ("vermelho")',
      ],
      returns: "void",
      example: 'penColour("#ff0000");',
    },
    pintarFundo: {
      description: "Permite pintar o fundo da cena de uma cor",
      syntax: "pintarFundo(cor)",
      parameters: [
        'cor: string - Cor em hexadecimal (#ff0000) ou nome ("vermelho")',
      ],
      returns: "void",
      example: 'pintarFundo("#000080");',
    },
  },
  allowedControlStructures: ["if", "else", "while", "for", "var", "function"],
  fases: [
    {
      id: 1,
      nome: "O Quadrado",
      descricao: "Desenhe um quadrado.",
      allowedBlocks: [
        "turtle_move_internal",
        "turtle_turn_internal",
        "turtle_repeat_internal",
      ],
      maxBlocks: 10,
      timeout: 15,
      requiredDrawingMatch: true,
      solutionCode:
        "var count = 0;\n" +
        "while (count < 4) {\n" +
        "  move(100);\n" +
        "  turn(90);\n" +
        "  count = count + 1;\n" +
        "}\n",
    },
    {
      id: 2,
      nome: "O Pentágono",
      descricao: "Desenhe um pentágono.",
      allowedBlocks: [
        "turtle_move_internal",
        "turtle_turn_internal",
        "turtle_repeat_internal",
      ],
      maxBlocks: 10,
      timeout: 15,
      requiredDrawingMatch: true,
      solutionCode:
        "for (var count = 0; count < 5; count++) {\n" +
        "  move(100);\n" +
        "  turn(72);\n" +
        "}\n",
    },
    {
      id: 3,
      nome: "A Estrela",
      descricao: "Desenhe uma estrela amarela.",
      allowedBlocks: [
        "turtle_move_internal",
        "turtle_turn_internal",
        "turtle_repeat_internal",
        "turtle_colour_internal",
      ],
      maxBlocks: 12,
      timeout: 20,
      requiredDrawingMatch: true,
      solutionCode:
        "function drawStar(length) {\n" +
        "  for (var count = 0; count < 5; count++) {\n" +
        "    move(length);\n" +
        "    turn(144);\n" +
        "  }\n" +
        "}\n" +
        'penColour("#ffff00");\n' +
        "drawStar(100);\n",
    },
    {
      id: 4,
      nome: "Estrela e Linha",
      descricao: "Desenhe uma estrela e depois uma linha ao lado.",
      allowedBlocks: [
        "turtle_move_internal",
        "turtle_turn_internal",
        "turtle_repeat_internal",
        "turtle_pen",
        "turtle_colour_internal",
      ],
      maxBlocks: 15,
      timeout: 20,
      requiredDrawingMatch: true,
      solutionCode:
        "function drawStar(length) {\n" +
        "  for (var count = 0; count < 5; count++) {\n" +
        "    move(length);\n" +
        "    turn(144);\n" +
        "  }\n" +
        "}\n" +
        'penColour("#ffff00");\n' +
        "drawStar(50);\n" +
        "penDown(false);\n" +
        "move(150);\n" +
        "penDown(true);\n" +
        "move(20);\n",
    },
    {
      id: 5,
      nome: "Quatro Estrelas",
      timeout: 25,
      requiredDrawingMatch: true,
      descricao: "Desenhe quatro estrelas em um padrão circular.",
      allowedBlocks: [
        "turtle_move_internal",
        "turtle_turn_internal",
        "turtle_repeat_internal",
        "turtle_pen",
        "turtle_colour_internal",
      ],
      maxBlocks: 18,
      solutionCode:
        "function drawStar(length) {\n" +
        "  for (var count = 0; count < 5; count++) {\n" +
        "    move(length);\n" +
        "    turn(144);\n" +
        "  }\n" +
        "}\n" +
        'penColour("#ffff00");\n' +
        "for (var count = 0; count < 4; count++) {\n" +
        "  drawStar(50);\n" +
        "  penDown(false);\n" +
        "  move(150);\n" +
        "  turn(90);\n" +
        "  penDown(true);\n" +
        "}\n",
    },
    {
      id: 6,
      nome: "Três Estrelas e uma Linha",
      timeout: 25,
      requiredDrawingMatch: true,
      descricao: "Desenhe três estrelas e uma linha branca.",
      allowedBlocks: [
        "turtle_move_internal",
        "turtle_turn_internal",
        "turtle_repeat_internal",
        "turtle_pen",
        "turtle_colour_internal",
      ],
      maxBlocks: 20,
      solutionCode:
        "function drawStar(length) {\n" +
        "  for (var count = 0; count < 5; count++) {\n" +
        "    move(length);\n" +
        "    turn(144);\n" +
        "  }\n" +
        "}\n" +
        'penColour("#ffff00");\n' +
        "for (var count = 0; count < 3; count++) {\n" +
        "  drawStar(50);\n" +
        "  penDown(false);\n" +
        "  move(150);\n" +
        "  turn(120);\n" +
        "  penDown(true);\n" +
        "}\n" +
        "penDown(false);\n" +
        "turn(-90);\n" +
        "move(100);\n" +
        "penDown(true);\n" +
        'penColour("#ffffff");\n' +
        "move(50);\n",
    },
    {
      id: 7,
      nome: "Três Estrelas e Raios",
      timeout: 30,
      requiredDrawingMatch: true,
      descricao: "Desenhe três estrelas e quatro raios brancos.",
      allowedBlocks: [
        "turtle_move_internal",
        "turtle_turn_internal",
        "turtle_repeat_internal",
        "turtle_pen",
        "turtle_colour_internal",
      ],
      maxBlocks: 25,
      solutionCode:
        "function drawStar(length) {\n" +
        "  for (var count = 0; count < 5; count++) {\n" +
        "    move(length);\n" +
        "    turn(144);\n" +
        "  }\n" +
        "}\n" +
        'penColour("#ffff00");\n' +
        "for (var count = 0; count < 3; count++) {\n" +
        "  drawStar(50);\n" +
        "  penDown(false);\n" +
        "  move(150);\n" +
        "  turn(120);\n" +
        "  penDown(true);\n" +
        "}\n" +
        "penDown(false);\n" +
        "turn(-90);\n" +
        "move(100);\n" +
        "penDown(true);\n" +
        'penColour("#ffffff");\n' +
        "for (var count2 = 0; count2 < 4; count2++) {\n" +
        "  move(50);\n" +
        "  move(-50);\n" +
        "  turn(45);\n" +
        "}\n",
    },
    {
      id: 8,
      nome: "Três Estrelas e um Círculo",
      timeout: 320,
      requiredDrawingMatch: true,
      descricao: "Desenhe três estrelas e um círculo branco.",
      allowedBlocks: [
        "turtle_move_internal",
        "turtle_turn_internal",
        "turtle_repeat_internal",
        "turtle_pen",
        "turtle_colour_internal",
      ],
      maxBlocks: 25,
      solutionCode:
        "function drawStar(length) {\n" +
        "  for (var count = 0; count < 5; count++) {\n" +
        "    move(length);\n" +
        "    turn(144);\n" +
        "  }\n" +
        "}\n" +
        'penColour("#ffff00");\n' +
        "for (var count = 0; count < 3; count++) {\n" +
        "  drawStar(50);\n" +
        "  penDown(false);\n" +
        "  move(150);\n" +
        "  turn(120);\n" +
        "  penDown(true);\n" +
        "}\n" +
        "penDown(false);\n" +
        "turn(-90);\n" +
        "move(100);\n" +
        "penDown(true);\n" +
        'penColour("#ffffff");\n' +
        "for (var count2 = 0; count2 < 360; count2++) {\n" +
        "  move(50);\n" +
        "  move(-50);\n" +
        "  turn(1);\n" +
        "}\n",
    },
    {
      timeout: 320,
      requiredDrawingMatch: true,
      id: 9,
      nome: "Lua Crescente",
      descricao: "Desenhe três estrelas e uma lua crescente.",
      allowedBlocks: [
        "turtle_move_internal",
        "turtle_turn_internal",
        "turtle_repeat_internal",
        "turtle_pen",
        "turtle_colour_internal",
      ],
      maxBlocks: 35,
      solutionCode:
        "function drawStar(length) {\n" +
        "  for (var count = 0; count < 5; count++) {\n" +
        "    move(length);\n" +
        "    turn(144);\n" +
        "  }\n" +
        "}\n" +
        'penColour("#ffff00");\n' +
        "for (var count = 0; count < 3; count++) {\n" +
        "  drawStar(50);\n" +
        "  penDown(false);\n" +
        "  move(150);\n" +
        "  turn(120);\n" +
        "  penDown(true);\n" +
        "}\n" +
        "penDown(false);\n" +
        "turn(-90);\n" +
        "move(100);\n" +
        "penDown(true);\n" +
        'penColour("#ffffff");\n' +
        "for (var count2 = 0; count2 < 360; count2++) {\n" +
        "  move(50);\n" +
        "  move(-50);\n" +
        "  turn(1);\n" +
        "}\n" +
        "turn(120);\n" +
        "move(20);\n" +
        'penColour("#000000");\n' +
        "for (var count3 = 0; count3 < 360; count3++) {\n" +
        "  move(50);\n" +
        "  move(-50);\n" +
        "  turn(1);\n" +
        "}\n",
    },
    {
      id: 10,
      nome: "Desafio Livre",
      descricao:
        "Crie seu próprio desenho, agora com código! Use sua criatividade e divirta-se.",
      timeout: 320,
      requiredDrawingMatch: false,
      mensagens: {
        sucessoGenerico: "Incrível! Continue explorando e criando!",
      },
      allowedGlobals: [
        "move",
        "turn",
        "penDown",
        "penColour",
        "desenharCirculo",
        "var",
        "while",
        "for",
        "if",
        "else",
        "function",
        "return",
        "count",
        "true",
        "false",
      ],
      solutionCode: "",
      initialCode: `// === INSTRUÇÕES DE USO ===
// A tartaruga começa no centro da tela, virada para a direita

// MOVIMENTOS BÁSICOS:
// move(100);        // Move para frente 100 pixels
// move(-50);        // Move para trás 50 pixels  
// turn(90);         // Vira 90 graus para esquerda
// turn(-90);        // Vira 90 graus para direita

// CONTROLE DA CANETA:
// penDown(true);    // Abaixa a caneta (desenha)
// penDown(false);   // Levanta a caneta (não desenha)

// CORES DISPONÍVEIS:
// penColour("#ff0000");     // Vermelho
// penColour("#00ff00");     // Verde
// penColour("#0000ff");     // Azul
// penColour("#ffff00");     // Amarelo
// penColour("#ffffff");     // Branco
// penColour("#000000");     // Preto
// penColour("vermelho");    // Ou use nomes em português

// OUTROS COMANDOS:
// pintarFundo("#000080");   // Muda cor do fundo

// EXEMPLO - QUADRADO VERMELHO:
//penColour("#ff0000");
//for (var i = 0; i < 4; i++) {
//  move(100);
//  turn(90);
//}

// EXEMPLO - CÍRCULO AZUL:
//penColour("#0000ff");
//for (var i = 0; i < 360; i++) {
//  move(2);
//  turn(1);
//}
`,
    },
  ],
};
