package com.novoda.noplayer.internal.exoplayer.mediasource;

import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.drm.DrmInitData;

import java.util.Collections;
import java.util.List;

class AudioFormatFixture {

    private String id = "id";
    private String sampleMimeType = "mime_type";
    private String codecs = "codecs";
    private int bitrate = 100;
    private int maxInputSize = 200;
    private int channelCount = 2;
    private int sampleRate = 50;
    private List<byte[]> initializationData = Collections.emptyList();
    private DrmInitData drmInitData = new DrmInitData(Collections.<DrmInitData.SchemeData>emptyList());
    private int selectionFlags = 0;
    private String language = "english";

    static AudioFormatFixture anAudioFormat() {
        return new AudioFormatFixture();
    }

    AudioFormatFixture withId(String id) {
        this.id = id;
        return this;
    }

    AudioFormatFixture withSampleMimeType(String sampleMimeType) {
        this.sampleMimeType = sampleMimeType;
        return this;
    }

    AudioFormatFixture withCodecs(String codecs) {
        this.codecs = codecs;
        return this;
    }

    AudioFormatFixture withBitrate(int bitrate) {
        this.bitrate = bitrate;
        return this;
    }

    AudioFormatFixture withMaxInputSize(int maxInputSize) {
        this.maxInputSize = maxInputSize;
        return this;
    }

    AudioFormatFixture withChannelCount(int channelCount) {
        this.channelCount = channelCount;
        return this;
    }

    AudioFormatFixture withSampleRate(int sampleRate) {
        this.sampleRate = sampleRate;
        return this;
    }

    AudioFormatFixture withInitializationData(List<byte[]> initializationData) {
        this.initializationData = initializationData;
        return this;
    }

    AudioFormatFixture withDrmInitData(DrmInitData drmInitData) {
        this.drmInitData = drmInitData;
        return this;
    }

    AudioFormatFixture withSelectionFlags(int selectionFlags) {
        this.selectionFlags = selectionFlags;
        return this;
    }

    AudioFormatFixture withLanguage(String language) {
        this.language = language;
        return this;
    }

    Format build() {
        return Format.createAudioSampleFormat(
                id,
                sampleMimeType,
                codecs,
                bitrate,
                maxInputSize,
                channelCount,
                sampleRate,
                initializationData,
                drmInitData,
                selectionFlags,
                language
        );
    }

}