# 🧠 LLM Prompt – Retail Media Calculation Agent

## Purpose

You are a smart data agent. Your job is to:

1. **Extract input values** from the existing form ( `index.html`).
2. **Read constants and formulas** from an existing `config.json`.
3. **Normalize input**:
   - For any question that asks for a percentage (e.g., "percentage of stores with screens"), **divide that value by 100** before using it in calculations.
4. **Apply the formulas** to calculate the following metrics and **insert the values into `results.json`** under the following keys:

```json
{
  "potential_reach_in_store": <calculated_value>,
  "unique_impressions_in_store": <calculated_value>,
  "potential_reach_on_site": <calculated_value>,
  "unique_impressions_on_site": <calculated_value>,
  "potential_reach_off_site": <calculated_value>,
  "unique_impressions_off_site": <calculated_value>
}
```

---

## 🔢 Formulas

- **% stores with retail media**  
  `= min(stores_with_screens, stores_with_radio) + abs(stores_with_screens - stores_with_radio) / 2`

- **potential_reach_in_store**  
  `= (transactions × % stores with retail media / frequency) × visitor_coefficient`

- **unique_impressions_in_store**  
  `= ((dwell_time + 60 × ad_duration) × frequency × capture_rate_screen × paid_screen × screen_count) + ((dwell_time + 60 × ad_duration) × frequency × (radio_percentage / 0.5) × paid_radio)`

- **potential_reach_on_site**  
  `= (website_visits × (1 - website_bounce_rate) / website_frequency) + (app_users × (1 - app_bounce_rate)) + (loyalty_users × (1 - loyalty_bounce_rate))`

- **unique_impressions_on_site**  
  `= average_impressions_website × website_frequency × if_website + average_impressions_app × app_frequency × if_app + average_impressions_loyalty × loyalty_frequency × if_loyalty`

- **potential_reach_off_site**  
  `= sum of (followers × (1 - off_site_bounce_rate))` for each channel selected

- **unique_impressions_off_site**  
  `= frequency × avg_impressions × if_channel` for each selected channel (e.g., Facebook, Instagram, etc.)

---

## ✅ Boolean Inputs

Use `if_channel = 1` if selected, `0` otherwise.

---

## ⚙️ Additional Behavior

After the user clicks the **Submit** button on the form:

- The formulas must be executed using the inputs.
- The calculated values must be generated and replaced into the `results.json`.
- This logic should be implemented in a **separate script file** responsible for handling the form submission, reading constants, applying formulas, and updating the config.

---

## 📁 Output: results.json

We maintain a JSON file named `results.json` with the following structure:

```json
{
  "potential_reach_in_store": <calculated_value>,
  "unique_impressions_in_store": <calculated_value>,
  "potential_reach_on_site": <calculated_value>,
  "unique_impressions_on_site": <calculated_value>,
  "potential_reach_off_site": <calculated_value>,
  "unique_impressions_off_site": <calculated_value>
}
```

On **each form submission**, the formulas must be:

- **Executed using the latest input values**
- **The `results.json` file must be updated (overwritten) with the new results**

This logic is to be implemented in **Node.js**, in a dedicated script that handles:

- Reading user input
- Parsing `config.json`
- Performing calculations
- Writing updated values into `results.json`
