package org.ebookdroid.opds;

import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;

public enum OPDSBookType {

    /**
     *
     */
    PDF(false, "application/pdf"),
    /**
     *
     */
    DJVU(false, "application/djvu", "image/djvu", "image/x-djvu", "image/vnd.djvu"),
    /**
     *
     */
    FB2(true, "application/fb2", "text/fb2+xml"),
    /**
     *
     */
    CBZ(false, "application/x-cbz"),
    /**
    *
    */
    CBR(false, "application/x-cbr");

    private final boolean supportZip;
    private final Set<String> mimeTypes;

    private OPDSBookType(final boolean supportZip, final String... mimeTypes) {
        this.supportZip = supportZip;
        this.mimeTypes = new LinkedHashSet<String>(Arrays.asList(mimeTypes));
    }

    public boolean isZipSupported() {
        return supportZip;
    }

    public static OPDSBookType getByMimeType(final String mimeType) {
        for (final OPDSBookType t : values()) {
            if (t.mimeTypes.contains(mimeType)) {
                return t;
            }
            if (isZippedContent(mimeType)) {
                if (t.mimeTypes.contains(mimeType.substring(0, mimeType.length() - "+zip".length()))) {
                    return t;
                }
            }
        }
        return null;
    }

    public static boolean isZippedContent(final String mimeType) {
        return mimeType.endsWith("+zip");
    }
}
