syntax = "proto3";
option go_package = "grpc/kafka_grpc";

message GRPC_ValetPayload {
    string handler = 1;
    oneof Data {
        VIN emptyMsg = 2;
        RemoteCommand remoteCmd = 3;
        VIN digitalTwinReq = 4;
        MapDestinationRequest mapDestReq = 5;
        MapRouteRequest MapRouteReq = 6;
        MapHistory mapHistory = 7;
        MobileSettingsUpdate settingsUpdate = 8;
        MobileChargeSetting mobileChargeSetting = 9;
        DepartureSchedule departureSchedule = 10;
        StorePurchases storePurchases = 11;
        PointOfInterest poiCreate = 12;
        MobilePOIEditMessage poiEdit = 13;
        MobilePOIDeleteMessage poiDelete = 14;
        VIN wakecar = 15;
        AddIssueRequest addIssueReq = 16;
        ChargingCommand chCMD = 17;
        RemoteCommandSrc remoteCmdSrc = 18;
        MobileDepartureSchedule mobileDepartureSchedule = 19;
        BLEKeyRequest BLEKey = 20;
        HMISettingsUpdate hmiSettingsUpdate = 21;
        HMIMapHistory hmiMapHistory = 22;
        HMIPOIsMessage hmiPOIsMessage = 23;
        UserConsentFromHMI userConsentFromHMI = 24;
        JSONHMIDeleteProfile hmiDeleteProfile = 25;
        ChargeSettings chargeSetting = 26;
    }
}

message VIN {
    string vin = 1;
}

message RemoteCommand {
    string vin = 1;
    string source = 2;
    optional string time = 3;
    int64 wait_dur = 4;
    string command = 5;
    optional string data = 6;
    optional string start = 7;
    optional string end = 8;
}

message RemoteCommandSrc {
    string cmd = 1;
    optional string data = 2;
    optional int64 start = 3;
    optional int64 end = 4;
}

message MapDestinationRequest {
    string vin = 1;
    string name = 2;
    TomTomAddress address = 3;
    MapCoordinates coordinates = 4;
}
  
message MapCoordinates {
    double latitude = 1 [json_name = "latitude"];
    double longitude = 2 [json_name = "longitude"];
}
  
message TomTomAddress {
    string street_number = 1;
    string street_name = 2;
    string local_name = 3;
    string postal_code = 4;
    string country_subdivision_name = 5;
    string country_code_iso3 = 6;
}



message MapRouteRequest {
    string vin = 1;
    repeated MapWaypoint waypoints = 2;
    repeated MapCoordinates route = 3;
}
  
message MapWaypoint {
    string type = 1;
    string title = 2;
    MapCoordinates coordinates = 3;
}

message MapHistory {
    string name = 1 [json_name = "name"];
    string description = 2 [json_name = "description"];
    MapCoordinates location = 3 [json_name = "location"];
}

message CarSetting {
    string vin = 1;
    string driverId = 2;
    string name = 3;
    string value = 4;
    string type = 5;
    optional int64 created = 6;
    optional int64 updated = 7;
}

message MobileSettingsUpdate {
    string vin = 1;
    repeated CarSetting settings = 2;
}

message HMISettingsUpdate {
    string driverId = 1;
    repeated CarSetting settings = 2;
}

message MobileDepartureSchedule {
    string vin = 1;
    DepartureSchedule departure_schedule = 2;
}
  
message DepartureSchedule {
    optional string next_day_departure = 1;
    repeated DepartureDay departure_days = 2;
}
  
message DepartureDay {
    string day_of_week = 1;
    string time = 2;
}

message MobileChargeSetting {
    string vin = 1;
    ChargeSettings chargeSettings = 2;
}
message ChargeSettings {
  int32 charge_limit = 1;
  int32 max_current = 2;
  optional int32 minCharge = 3 [json_name = "min_charge"];
  OffPeakCharging offPeakCcharging = 4 [json_name = "off_peak_charging"];
}

message OffPeakCharging {
	int64 start = 1;
	int64 end = 2;
}

message StorePurchaseItem {
    string id = 1;
}
  
message StorePurchases {
    string vin = 1;
    repeated StorePurchaseItem purchases = 2;
}

message PointOfInterest {
    string name = 1;
    POILocation location = 2;
}
  
message POILocation {
    double latitude = 1 [json_name = "latitude"];
    double longitude = 2 [json_name = "longitude"];
}

message MobilePOIEditMessage {
    string old_name = 1;
    PointOfInterest user_poi = 2;
}

message MobilePOIDeleteMessage {
    string name = 1;
}

message AddIssueRequest {
    Issue issue = 1;
    repeated bytes images = 2;
}
  
message Issue {
    int32 id = 1;
    string vin = 2;
    string title = 3;
    string description = 4;
    string driver_id = 5;
    int64 timestamp = 6;
    repeated IssueImage images = 7;
}
  
message IssueImage {
    int32 id = 1;
    bytes image = 2;
    int32 issue_id = 3;
}

message ChargingCommand {
    string action = 1;
}

message BLEKeyRequest {
    string driver_id = 1;
    string ble_key = 2;
}

message HMIMapHistory {
    string driver_id = 1;
    repeated MapHistory searches = 2;
}

message HMIPOIsMessage {
    string DriverId = 1 [json_name = "driver_id"];
    repeated PointOfInterest userPOIs = 2 [json_name = "user_pois"];
}

message UserConsentFromHMI {
    repeated UserConsent userConsent = 1;
}

message UserConsent {
    string name = 1;
    bool accept = 2;
    string driver_id = 3;
}

message JSONHMIDeleteProfile {
    string driver_id = 1;
}