enum DurationType {
    case Current
    case Max
}

struct Constants {
    static let methodChannelName = "simform_audio_waveforms_plugin/methods"
    static let audioWaveforms = "AudioWaveforms"
    static let startRecording = "startRecording"
    static let pauseRecording = "pauseRecording"
    static let stopRecording = "stopRecording"
    static let getDecibel = "getDecibel"
    static let checkPermission = "checkPermission"
    static let path = "path"
    static let encoder = "encoder"
    static let sampleRate = "sampleRate"
    static let bitRate = "bitRate"
    static let fileNameFormat = "YY-MM-dd-HH-mm-ss"
    static let resumeRecording = "resumeRecording"

    static let kAudioFormatMPEG4AAC = 0
    static let kAudioFormatMPEGLayer1 = 1
    static let kAudioFormatMPEGLayer2 = 2
    static let kAudioFormatMPEGLayer3 = 3
    static let kAudioFormatMPEG4AAC_ELD = 4
    static let kAudioFormatMPEG4AAC_HE = 5
    static let kAudioFormatOpus = 6
    static let kAudioFormatAMR = 7
    static let kAudioFormatAMR_WB = 8
    static let kAudioFormatLinearPCM = 9
    static let kAudioFormatAppleLossless = 10
    static let kAudioFormatMPEG4AAC_HE_V2 = 11

    static let readAudioFile = "readAudioFile"
    static let durationEventChannel = "durationEventChannel"
    static let startPlayer = "startPlayer"
    static let stopPlayer = "stopPlayer"
    static let pausePlayer = "pausePlayer"
    static let releasePlayer = "releasePlayer"
    static let seekTo = "seekTo"
    static let progress = "progress"
    static let setVolume = "setVolume"
    static let setRate = "setRate"
    static let rate = "rate"
    static let volume = "volume"
    static let finishMode = "finishMode"
    static let finishType = "finishType"
    static let getDuration = "getDuration"
    static let durationType = "durationType"
    static let preparePlayer = "preparePlayer"
    static let onCurrentDuration = "onCurrentDuration"
    static let current = "current"
    static let playerKey = "playerKey"
    static let stopAllPlayers = "stopAllPlayers"
    static let onDidFinishPlayingAudio = "onDidFinishPlayingAudio"
    static let extractWaveformData = "extractWaveformData"
    static let noOfSamples = "noOfSamples"
    static let onCurrentExtractedWaveformData = "onCurrentExtractedWaveformData"
    static let waveformData = "waveformData"
    static let onExtractionProgressUpdate = "onExtractionProgressUpdate"
    static let useLegacyNormalization = "useLegacyNormalization"
    static let updateFrequency = "updateFrequency"
    static let overrideAudioSession = "overrideAudioSession"
    static let resultFilePath = "resultFilePath"
    static let resultDuration = "resultDuration"
    static let linearPCMBitDepth = "linearPCMBitDepth";
    static let linearPCMIsBigEndian = "linearPCMIsBigEndian";
    static let linearPCMIsFloat = "linearPCMIsFloat";
    static let pauseAllPlayers = "pauseAllPlayers"
    static let stopExtraction = "stopExtraction"
    static let onAudioChunk = "onAudioChunk"
    static let bytes = "bytes"
    static let normalisedRms = "normalisedRms"
    static let recordedDuration = "recordedDuration"
    static let defaultSampleRate = 44100
}


/// Creates an 2D array of floats
public typealias FloatChannelData = [[Float]]

/// Extension to fill array with zeros
public extension RangeReplaceableCollection where Iterator.Element: ExpressibleByIntegerLiteral {
    init(zeros count: Int) {
        self.init(repeating: 0, count: count)
    }
}

enum FinishMode : Int{
    case loop = 0
    case pause = 1
    case stop = 2
}
