# Sistema de Controle de Estoque
## Funcionalidades
- Consumir um csv com a lista de produtos
- Inserir produtos
- Atualizar produtos (nome, quantidade, preço e categoria)
- Excluir produtos
- Gerar um csv atualizado
- Listar e ordenar produtos por: categoria, preço, datas, nome
## Classe `Product`
Representa um produto no inventário.
### Campos
- `name`: O nome do produto.
- `quantity`: A quantidade do produto no estoque.
- `price`: O preço do produto.
- `creationDate`: A data de criação do produto.
- `category`: A categoria do produto.
- `updateDate`: A data da última atualização do produto.
### Métodos
- `getName()`: Retorna o nome do produto.
- `getQuantity()`: Retorna a quantidade do produto.
- `getPrice()`: Retorna o preço do produto.
- `getCreationDate()`: Retorna a data de criação do produto.
- `getCategory()`: Retorna a categoria do produto.
- `getUpdateDate()`: Retorna a data da última atualização do produto.
---
## Classe `Inventory`
Representa o inventário de produtos.
### Campos
- `products`: Uma lista de produtos no inventário.
### Métodos
- `addProduct(Product product)`: Adiciona um produto ao inventário.
- `removeProduct(Product product)`: Remove um produto do inventário.
- `getProducts()`: Retorna a lista de produtos no inventário.
- `consumeCSV(String fileName)`: Lê um arquivo CSV e adiciona todos os produtos listados no arquivo ao inventário.
- `generateCSV(String fileName)`: Escreve a lista atual de produtos no inventário para um arquivo CSV.
- `listAndSortProducts(String sortBy)`: Retorna a lista de produtos no inventário, ordenada por um critério especificado.
---
## Classe `CSVHandler`
Fornece métodos para ler e escrever arquivos CSV.
### Métodos
- `writeCSV(List<Product> products, String fileName)`: Escreve uma lista de produtos para um arquivo CSV.
- `readCSV(String fileName)`: Lê um arquivo CSV e retorna um `Inventory` com os produtos listados no arquivo.
---
## Classe `Main`
Executa o programa.
### Métodos
- `main(String[] args)`: O ponto de entrada do programa. Cria um novo inventário, consome um arquivo CSV, lista e ordena produtos, e gera um novo arquivo CSV.
---