
---
<div style="display:flex;align-items:center;justify-content:center;flex-direction:column;" align="center">
  <img style="width:10px;" src="https://www.digikey.com/-/media/Images/Vendors/B/web-belden.png?la=en-US&ts=db9a9e88-b1c7-415a-a252-934462927b19&w=200&h=100">
</div>

---

<div style="display:flex;align-items:center;justify-content:center;flex-direction:column;" align="center">
  <h3><b>Belden Jukebox Front/Back Specification: </b></h3>
  <p><b>This document outlines how data will be transmitted between the frontend and the backend.</b></p>
</div>


### Standard Object
All objects sent between the frontend and backend will follow this format.

```json
{
  "type": "name_of_request",
  "call": "send, request",
  "data": {}
}
```

---

## CABLE_MAP Object

### Front:
> Front -> Back 
```json
{
  "type": "cable_map",
  "call": "request",
  "data": {}
}

One Liner: {"type":"cable_map","call":"request","data":{}}
```

### Back:
> Back -> Front
```json
{
  "type": "cable_map",
  "call": "send",
  "data": {
    "map": [
      {
        "part_number": 12345,
        "position": 0, // 0-53
        "name": "Fancy Displayable Name",
        "brand": "Belden",
        "description": "This is a good cable!",
        "short_description": "Good cable!",
        "image": "https://google.com"
      }
      // many more items
    ]
  }
}

One Liner: {"type":"cable_map","call":"send","data":{"map":[{"part_number":12345,"position":0,"name":"Fancy Displayable Name","brand":"Belden","description":"This is a good cable!","short_description":"Good cable!"}]}}
``` 


## CABLE_DETAILS Object
### Front:
> Front -> Back 
```json
{
  "type": "cable_details",
  "call": "request",
  "data": {
    "part_number": [12345, 67890, 54321, 98765],
    "position": [0, 1, 2, 53]
  }
}

One Liner: {"type":"cable_details","call":"request","data":{"part_number":[12345,67890,54321,98765],"position":[0,1,2,53]}}
```

### Back:
> Back -> Front
```json
{
  "type": "cable_details",
  "call": "send",
  "data": {
    "cables": [
      {
        "part_number": 12345,
        "position": 0, // 0-53
        "part_image_url": "https://belden.com",
        "brand_image_url": "https://belden.com",
        "extracted_object": {
          // brand will be in here
        }
      }
      // more cables
    ]
  }
}

One Liner: {"type":"cable_details","call":"send","data":{"cables":[{"part_number":12345,"position":0,"part_image_url":"https://belden.com","brand_image_url":"https://belden.com","extracted_object":{}}]}}
```

---
## CABLE_SEARCH Object
### Front:
> Front -> Back 
```json
{
  "type": "cable_search",
  "call": "request",
  "data": {
    "string": "name/part_number/type/category/etc"
  }
}

One Liner: {"type":"cable_search","call":"request","data":{"string":"name/part_number/type/category/etc"}}
```

### Back:
> Back -> Front
```json
{
  "type": "cable_search",
  "call": "send",
  "data": {
    "cables": [
      {
        "part_number": 12345,
        "position": 0, // 0-53
        "part_image_url": "https://belden.com",
        "brand_image_url": "https://belden.com",
        "extracted_object": {
          // brand will be in here
        }
      }
      // more cables
    ]
  }
}

One Liner: {"type":"cable_search","call":"send","data":{"cables":[{"part_number":12345,"position":0,"part_image_url":"https://belden.com","brand_image_url":"https://belden.com","extracted_object":{}}]}}
```

---
## KEYBOARD Object
### Front:
> Front -> Back 
```json
{
  "type": "keyboard",
  "call": "request",
  "data": {
    "enabled": true
  }
}

One Liner: {"type":"keyboard","call":"request","data":{"enabled":true}}
```

---
## MACHINE_SETTINGS Object
### Front:
> Front -> Back 
```json
{
  "type": "machine_settings",
  "call": "request",
  "data": {}
}

One Liner: {"type":"machine_settings","call":"request","data":{}}
```

### Back:
> Back -> Front
```json
{
  "type": "machine_settings",
  "call": "send",
  "data": {
    "settings": [
      {
        "setting_name": "text field",
        "type": "text",
        "advanced": true,
        "current_value": "current value of seting"
      },
      {
        "setting_name": "radio button",
        "type": "radio",
        "advanced": true,
        "current_value": "option 1",
        "radio_values": ["option 1", "option 2", "option 3"]
      },
      {
        "setting_name": "check box",
        "type": "check",
        "advanced": true,
        "current_value": ["option 1", "option 2"],
        "radio_values": ["option 1", "option 2", "option 3"]
      },
      {
        "setting_name": "enabled or disabled",
        "type": "boolean",
        "advanced": true,
        "current_value": true
      },
      {
        "setting_name": "slider bar",
        "type": "slider",
        "advanced": true,
        "current_value": 50.0,
        "min": -100.0,
        "max": 100.0
      },
      {
        "setting_name": "button",
        "advanced": true,
        "type": "button"
      }
    ]
  }
}

One Liner: {"type":"machine_settings","call":"send","data":{"settings":[{"setting_name":"text field","type":"text","advanced":true,"current_value":"current value of seting"},{"setting_name":"radio button","type":"radio","advanced":true,"current_value":"option 1","radio_values":["option 1","option 2","option 3"]},{"setting_name":"check box","type":"check","advanced":true,"current_value":["option 1","option 2"],"radio_values":["option 1","option 2","option 3"]},{"setting_name":"enabled or disabled","type":"boolean","advanced":true,"current_value":true},{"setting_name":"slider bar","type":"slider","advanced":true,"current_value":50,"min":-100,"max":100},{"setting_name":"button","advanced":true,"type":"button"}]}}
```

### Front:
> Front -> Back
```json
{
  "type": "machine_settings",
  "call": "send",
  "data": {
    "settings": [
      {
        "setting_name": "text field",
        "type": "text",
        "new_value": "current value of seting"
      },
      {
        "setting_name": "radio button",
        "type": "radio",
        "new_value": ["option 1", "option 2", "option 3"]
      },
      {
        "setting_name": "check box",
        "type": "check",
        "new_value": ["option 1", "option 2", "option 3"]
      },
      {
        "setting_name": "enabled or disabled",
        "type": "boolean",
        "new_value": false
      },
      {
        "setting_name": "slider bar",
        "type": "slider",
        "new_value": 100.0
      },
      {
        "setting_name": "button",
        "type": "button",
        "new_value": true
      }
    ]
  }
}

One Liner: {"type":"machine_settings","call":"send","data":{"settings":[{"setting_name":"text field","type":"text","new_value":"current value of seting"},{"setting_name":"radio button","type":"radio","new_value":["option 1","option 2","option 3"]},{"setting_name":"check box","type":"check","new_value":["option 1","option 2","option 3"]},{"setting_name":"enabled or disabled","type":"boolean","new_value":false},{"setting_name":"slider bar","type":"slider","new_value":100},{"setting_name":"button","type":"button","new_value":true}]}}
```

---
