namespace AIStudio.Tools.MIME;

public class AudioBuilder : ISubtype
{
    private const BaseType BASE_TYPE = BaseType.AUDIO;

    private AudioBuilder()
    {
    }

    public static AudioBuilder Create() => new();

    private AudioSubtype subtype;

    public AudioBuilder UseSubtype(string subType)
    {
        this.subtype = subType.ToLowerInvariant() switch
        {
            "mpeg" => AudioSubtype.MPEG,
            "wav" => AudioSubtype.WAV,
            "ogg" => AudioSubtype.OGG,
            "aac" => AudioSubtype.AAC,
            "flac" => AudioSubtype.FLAC,
            "webm" => AudioSubtype.WEBM,
            "mp4" => AudioSubtype.MP4,
            "mp3" => AudioSubtype.MP3,
            "m4a" => AudioSubtype.M4A,
            "aiff" => AudioSubtype.AIFF,
            
            _ => throw new ArgumentException("Unsupported MIME audio subtype.", nameof(subType))
        };
        
        return this;
    }

    public AudioBuilder UseSubtype(AudioSubtype subType)
    {
        this.subtype = subType;
        return this;
    }
    
    #region Implementation of IMIMESubtype

    public MIMEType Build() => new()
    {
        Type = this,
        TextRepresentation = $"{BASE_TYPE}/{this.subtype}".ToLowerInvariant()
    };

    #endregion
}