import Foundation

struct DeviceDataRequest: DeviceRequest {

    typealias Response = Data

    static let type: BluetoothRequestType = .getRecordingData

    let offset: Int

    let count: Int

    var payload: Data {
        count.twoByteData + offset.twoByteData
    }

    init(offset: Int, count: Int) {
        self.offset = offset
        self.count = count
    }

    func makeResponse(from responseData: Data, responseType: BluetoothResponseType) -> Data? {
        switch responseType {
        case .success:
            break
        case .responseTooLarge:
            log.warning("Exceeded payload size for device data request (offset: \(offset), count: \(count))")
            break
        default:
            log.warning("Invalid response \(responseType) to device data request")
            return nil
        }
        guard responseData.count == count else {
            log.warning("Got \(responseData.count) for device data request (offset: \(offset), count: \(count))")
            return nil
        }
        return responseData
    }
}
