export const gameConfig = {
  gameId: "semaforo_code_editor",
  gameName: "Semáforo com Código",
  type: "code",
  icon: "🚦",
  descricao: "Controle o semáforo de carros e pedestres com código Javascript.",
  dificuldade: "Iniciante",
  categoria: "Lógica",
  tempoEstimado: "30-45 min",
  conceitos: ["Sequência", "Eventos", "Condicionais"],
  route: "/games/semaforo_code_editor",
  component: "SemaforoGame",
  ativo: true,
  destaque: false,
  prdReady: false,
  objectives: [
    "Controlar o semáforo de carros",
    "Usar eventos para interação",
    "Aplicar lógica condicional para segurança",
  ],
  metadata: {
    lastUpdated: "2025-08-17",
    version: "1.0.0",
  },
  allowedFunctions: [
    "mudarSemaforo",
    "mudarSemaforoPedestre",
    "aguardarSegundos",
    "piscarLuzPedestre",
    "tocarSom",
    "pararSom",
    "while",
  ],
  functionDocumentation: {
    mudarSemaforo: {
      description: "Muda a cor do semáforo dos carros.",
      syntax: "mudarSemaforo(cor)",
      parameters: ["cor: 'verde' | 'amarelo' | 'vermelho'"],
      returns: "void",
      example: "mudarSemaforo('verde');",
    },
    mudarSemaforoPedestre: {
      description: "Muda a cor do semáforo de pedestres.",
      syntax: "mudarSemaforoPedestre(cor)",
      parameters: ["cor: 'verde' | 'vermelho'"],
      returns: "void",
      example: "mudarSemaforoPedestre('verde');",
    },
    aguardarSegundos: {
      description:
        "Faz o programa esperar por um número específico de segundos.",
      syntax: "aguardarSegundos(segundos)",
      parameters: ["segundos: number"],
      returns: "void",
      example: "aguardarSegundos(5);",
    },
    piscarLuzPedestre: {
      description:
        "Faz a luz do semáforo de pedestres piscar por um determinado número de segundos.",
      syntax: "piscarLuzPedestre(cor, segundos)",
      parameters: ["cor: 'vermelho' | 'verde'", "segundos: number"],
      returns: "void",
      example: "piscarLuzPedestre('vermelho', 3);",
    },
    tocarSom: {
      description: "Toca um som específico.",
      syntax: "tocarSom(nomeDoSom)",
      parameters: ["nomeDoSom: 'beep_semaforo' | 'barulho_cidade'"],
      returns: "void",
      example: "tocarSom('barulho_cidade');",
    },
    while: {
      description:
        "Cria um loop que repete o bloco de código enquanto a condição for verdadeira.",
      syntax: "while (condição) { // código a ser repetido }",
      parameters: ["condição: boolean"],
      returns: "void",
      example: "while (true) {\n // código a ser repetido \n}",
    },
  },
  fases: [
    {
      id: 1,
      nome: "Controle básico do semáforo de carros",
      descricao:
        "Programe o semáforo dos carros para alternar entre verde, amarelo e vermelho.",
      allowedBlocks: ["mudar_semaforo"],
      temPedestre: false,
      timeout: 15,
      validationRegex: /mudarSemaforo\s*\(\s*'([^']+)'\s*\)\s*;/g,
      expectedSequence: ["verde", "amarelo", "vermelho"],
      initialCode: `// Use o bloco "mudar semáforo" para controlar as cores do semáforo dos carros.`,
    },
    {
      id: 2,
      nome: "Controle básico do semáforo de carros",
      descricao:
        "Programe o semáforo dos carros para alternar entre verde, amarelo e vermelho com espera (5 segundos para cada cor).",
      allowedBlocks: ["mudar_semaforo", "aguardar_segundos", "repetir"],
      temPedestre: false,
      timeout: 15,
      validationRegex:
        /(mudarSemaforo\s*\(\s*'([^']+)'\s*\)\s*;)|(aguardarSegundos\s*\(\s*5\s*\)\s*;)/g,
      expectedCommands: [
        { tipo: "semaforo", cor: "verde" },
        { tipo: "aguardar", seg: 5 },
        { tipo: "semaforo", cor: "amarelo" },
        { tipo: "aguardar", seg: 5 },
        { tipo: "semaforo", cor: "vermelho" },
        { tipo: "aguardar", seg: 5 },
      ],
      initialCode: `// Use o bloco "mudar semáforo" para controlar as cores do semáforo dos carros.
// Use o bloco "aguardar segundos" para definir o tempo que cada cor deve durar.
// Use o bloco "while(true) {}" para criar um ciclo infinito.`,
    },
    {
      id: 3,
      nome: "Controle do semáforo de pedestres",
      descricao:
        "Programe o semáforo dos carros e dos pedestres para alternar corretamente. Use os blocos de pedestre.",
      allowedBlocks: [
        "mudar_semaforo",
        "aguardar_segundos",
        "repetir",
        "mudar_semaforo_pedestre",
      ],
      temPedestre: false,
      timeout: 15,
      validationRegex:
        /(mudarSemaforo\s*\(\s*'([^']+)\'\s*\)\s*;)|(mudarSemaforoPedestre\s*\(\s*'([^']+)\'\s*\)\s*;)|(aguardarSegundos\s*\(\s*([0-9]+)\s*\)\s*;)/g,
      expectedCommands: [
        { tipo: "semaforo", cor: "verde" },
        { tipo: "pedestre", cor: "vermelho" },
        { tipo: "aguardar", seg: 5 },
        { tipo: "semaforo", cor: "amarelo" },
        { tipo: "aguardar", seg: 5 },
        { tipo: "semaforo", cor: "vermelho" },
        { tipo: "pedestre", cor: "verde" },
        { tipo: "aguardar", seg: 5 },
      ],
      initialCode: `// Use o bloco "mudar semáforo" para controlar as cores do semáforo dos carros.
// Use o bloco "mudar semáforo de pedestre" para controlar as cores do semáforo dos pedestres.
// Use o bloco "aguardar segundos" para definir o tempo que cada cor deve durar.
// Use o bloco "while(true) {}" para criar um ciclo infinito.`,
    },
    {
      id: 4,
      nome: "Semáforo de pedestres com luz piscante",
      descricao:
        "Programe o semáforo dos carros e dos pedestres para alternar corretamente. Após liberar o pedestre, faça a luz de pedestre piscar por 3 segundos antes de fechar.",
      allowedBlocks: [
        "mudar_semaforo",
        "aguardar_segundos",
        "repetir",
        "mudar_semaforo_pedestre",
        "piscar_luz_pedestre",
      ],
      temPedestre: true,
      timeout: 20,
      validationRegex:
        /(mudarSemaforo\s*\(\s*'([^']+)'\s*\)\s*;)|(mudarSemaforoPedestre\s*\(\s*'([^']+)'\s*\)\s*;)|(aguardarSegundos\s*\(\s*([0-9]+)\s*\)\s*;)|(piscarLuzPedestre\s*\(\s*'([^']+)'\s*,\s*([0-9]+)\s*\)\s*;)/g,
      expectedCommands: [
        { tipo: "semaforo", cor: "verde" },
        { tipo: "pedestre", cor: "vermelho" },
        { tipo: "aguardar", seg: 5 },
        { tipo: "semaforo", cor: "amarelo" },
        { tipo: "aguardar", seg: 5 },
        { tipo: "semaforo", cor: "vermelho" },
        { tipo: "pedestre", cor: "verde" },
        { tipo: "aguardar", seg: 5 },
        { tipo: "piscar", cor: "vermelho", seg: 5 },
      ],
      initialCode: `// Use o bloco "piscar luz do pedestre" para fazer a luz do pedestre piscar.`,
    },
    {
      id: 5,
      nome: "Semáforo com sons",
      descricao:
        "Programe o semáforo e controle os sons do jogo usando os blocos de tocar e parar som.",
      allowedBlocks: [
        "mudar_semaforo",
        "aguardar_segundos",
        "repetir",
        "mudar_semaforo_pedestre",
        "piscar_luz_pedestre",
        "tocar_som",
        "parar_som",
      ],
      temPedestre: true,
      timeout: 25,
      validationRegex:
        /(mudarSemaforo\s*\(\s*'([^']+)'\s*\)\s*;)|(mudarSemaforoPedestre\s*\(\s*'([^']+)'\s*\)\s*;)|(aguardarSegundos\s*\(\s*([0-9]+)\s*\)\s*;)|(piscarLuzPedestre\s*\(\s*'([^']+)'\s*,\s*([0-9]+)\s*\)\s*;)|(tocarSom\s*\(\s*'([^']+)'\s*\)\s*;)|(pararSom\s*\(\s*'([^']+)'\s*\)\s*;)/g,
      expectedCommands: [
        { tipo: "tocar", som: "barulho_cidade" },
        { tipo: "semaforo", cor: "verde" },
        { tipo: "pedestre", cor: "vermelho" },
        { tipo: "aguardar", seg: 5 },
        { tipo: "semaforo", cor: "amarelo" },
        { tipo: "aguardar", seg: 5 },
        { tipo: "semaforo", cor: "vermelho" },
        { tipo: "pedestre", cor: "verde" },
        { tipo: "tocar", som: "beep_semaforo" },
        { tipo: "aguardar", seg: 5 },
        { tipo: "piscar", cor: "vermelho", seg: 5 },
        { tipo: "parar", som: "beep_semaforo" },
      ],
      initialCode: `//Use tudo que aprendeu e agora adicione sons ao nosso jogo.
//Adicione sons ao semáforo usando os blocos "tocar som" e "parar som". Exemplo: \n
//tocarSom('barulho_cidade');
//tocarSom('beep_semaforo');
//pararSom('beep_semaforo');`,
    },
  ],
};
