# #1 - Sistema de fila

Olá Dev! Neste desafio, sua tarefa será desenvolver uma solução que resolva o problema descrito a seguir, seguindo as instruções e regras fornecidas.

***

### Problema:

Desenvolvemos um modo de jogo PvP que reúne 10 jogadores divididos igualmente em dois times, competindo rodada a rodada até que um dos times alcance 13 pontos e conquiste a vitória.

Com o modo de jogo finalizado, precisamos de um sistema de filas que identifique grupos de jogadores buscando partida e forme times prontos para iniciar o jogo.

***

### Condições gerais:

1. Por se tratar de um sistema de fila que comporta a formação de times baseados em grupos, os jogadores em um grupo "incompleto" não podem ser separados e precisam permanecer juntos durante a formação de um time.
2. Os grupos dos jogadores devem ser persistidos para que ao fim da partida, os mesmos retornem a busca de novos times e partidas no mesmo grupo.

***

### Observações importantes:

1. Utilize Lua como linguagem principal para o desenvolvimento, dentro do ambiente do FiveM;
2. Priorize a eficiência e a escalabilidade do sistema;
3. Documente adequadamente o código para facilitar a manutenção e futuras expansões;
4. Envie o código para um repositório destinado ao desafio, fazendo o uso de boas práticas do uso do Git & Github.

***

### Solução requerida:

1. A formação de times de 5 jogadores;
2. A preservação dos grupo;
3. A definição dos times de ataque e defesa da times partida;
4. O consumo de uma função (Fictícia), quando os times estiverem prontos para iniciar a partida.

{% tabs %}
{% tab title="Dados da fila" %}
Utilize a `Table` a seguir como dados de fila, onde determinados grupos de jogadores estão buscando pela formação de times e partida.

```lua
Queue = {
    ['group:1'] = {
        players = {
            [1] = {
                nick = 'ViperGT',
                leader = true
            }
        }
    },
    ['group:4'] = {
        players = {
            [2] = {
                nick = 'BlazeGamer',
                leader = false
            },
            [3] = {
                nick = 'SpeedRacer',
                leader = false
            },
            [4] = {
                nick = 'ShadowNinja',
                leader = true
            },
            [5] = {
                nick = 'PhoenixFire',
                leader = false
            }
        }
    },
    ['group:6'] = {
        players = {
            [6] = {
                nick = 'ThunderBolt',
                leader = true
            },
            [7] = {
                nick = 'GhostRider',
                leader = false
            }
        }
    },
    ['group:9'] = {
        players = {
            [8] = {
                nick = 'NeonSpectre',
                leader = false
            },
            [9] = {
                nick = 'DriftKing',
                leader = true
            }
        }
    },
    ['group:10'] = {
        players = {
            [10] = {
                nick = 'MidnightWolf',
                leader = true
            }
        }
    }
}
```

{% endtab %}

{% tab title="Exemplo esperado" %}
A `Table` abaixo é um exemplo do resultado esperado, onde foram formados dois times, seguindo as soluções requeridas.

```lua
Teams = {
    attackers = {
        players = {
            [10] = {
                nick = 'MidnightWolf',
                group = 'group:10',
                leader = true
            },
            [2] = {
                nick = 'BlazeGamer',
                group = 'group:4',
                leader = false
            },
            [3] = {
                nick = 'SpeedRacer',
                group = 'group:4',
                leader = false
            },
            [4] = {
                nick = 'ShadowNinja',
                group = 'group:4',
                leader = true
            },
            [5] = {
                nick = 'PhoenixFire',
                group = 'group:4',
                leader = false
            }
        }
    },
    defenders = {
        players = {
            [6] = {
                nick = 'ThunderBolt',
                group = 'group:6',
                leader = true
            },
            [7] = {
                nick = 'GhostRider',
                group = 'group:6',
                leader = false
            }
            [8] = {
                nick = 'NeonSpectre',
                group = 'group:9',
                leader = false
            },
            [9] = {
                nick = 'DriftKing',
                group = 'group:9',
                leader = true
            }
            [1] = {
                nick = 'ViperGT',
                group = 'group:1',
                leader = true
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

***

### Critérios de avaliação:

1. Funcionalidade e eficiência do sistema de fila e formação de times;
2. Qualidade da implementação em Lua;
3. Documentação clara e concisa do código;
4. Boas práticas de desenvolvimento;
5. Boas práticas de uso do Git e Github;

***

### Observações adicionais:

<details>

<summary>Extensões usadas pelo time de desenvolvimento WINS</summary>

* Lua by Sumneko \[sumneko.lua]
* CfxLua (FiveM/RedM) IntelliSense \[overextended.cfxlua-vscode]
* EditorConfig for VS Code \[EditorConfig.EditorConfig]

</details>
