# Setup development environment

## Backend
To build the backend, you will need to install:

* Rust: https://www.rust-lang.org/
* An IDE with Rust support. I would definitly recommend [RustRover](https://www.jetbrains.com/rust/) (the tool from IntelliJ).

Check if your environment is working using the following command:

```bash
cargo fmt && cargo clippy && cargo run -- --help
```

For development, the following flags might prove being useful:
* `--unsecure-disable-login`: Disable authentication on all web API endpoints
* `--hostname`: Change public server hostname, if you want to expose your test instance to network device, such as an ESP32

## Custom consumption
Same requirements as for the backend. This tool spawns a gui that allows to set arbitrary consumption values:

![Custom consumption](img/custom_consumption.png)


To use it, first launch this tool:

```bash
cd custom_consumption
cargo run
```

Set a custom value to force file creation (in the UI).

Then launch central backend (in another terminal):

```bash
cd central_backend
cargo fmt && cargo clippy && RUST_LOG=debug cargo run -- file
```


## Central frontend
The frontend has been built using [NodeJS](https://nodejs.org/en), [Vite](https://vite.dev/) and [MUI](https://mui.com/).

Launch it using this command:

```bash
cd central_frontend
npm run dev
```

## Python device
This component has been built using ... Python. Waw!

You will need to install this dependency, first:
```bash
apt install python3-jwt
```


Run the client:

```bash
cd python_device
python3 -m src.main

# Get CLI help
python3 -m src.main --help
```


Reformat code:

```bash
black src/*.py
```

## ESP32 device
The ESP32 device is in reality a [Wt32-Eth01](https://en.wireless-tag.com/product-item-2.html) device. Use the following mapping to setup dev env:

![ESP mapping](img/esp_mapping.png)

You can use a [CP2102](https://fr.aliexpress.com/item/4000120687489.html) to flash the ESP32.

I recommend to use VSCode with the following extensions:
* [ESP-IDF](https://marketplace.visualstudio.com/items?itemName=espressif.esp-idf-extension)
* [C/C++](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)
* [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)

To build the project, use this command (in an ESP-IDF terminal):

```bash
idf.py build
```

To flash the ESP32, use this one:

```bash
idf.py flash
```

To capture logs from device, use either `cu` or the following command:

```
idf.py monitor
```