package oss

import (
	"mime"
	"path"
	"strings"
)

var extToMimeType = map[string]string{
	".xlsx":    "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
	".xltx":    "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
	".potx":    "application/vnd.openxmlformats-officedocument.presentationml.template",
	".ppsx":    "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
	".pptx":    "application/vnd.openxmlformats-officedocument.presentationml.presentation",
	".sldx":    "application/vnd.openxmlformats-officedocument.presentationml.slide",
	".docx":    "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
	".dotx":    "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
	".xlam":    "application/vnd.ms-excel.addin.macroEnabled.12",
	".xlsb":    "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
	".apk":     "application/vnd.android.package-archive",
	".hqx":     "application/mac-binhex40",
	".cpt":     "application/mac-compactpro",
	".doc":     "application/msword",
	".ogg":     "application/ogg",
	".pdf":     "application/pdf",
	".rtf":     "text/rtf",
	".mif":     "application/vnd.mif",
	".xls":     "application/vnd.ms-excel",
	".ppt":     "application/vnd.ms-powerpoint",
	".odc":     "application/vnd.oasis.opendocument.chart",
	".odb":     "application/vnd.oasis.opendocument.database",
	".odf":     "application/vnd.oasis.opendocument.formula",
	".odg":     "application/vnd.oasis.opendocument.graphics",
	".otg":     "application/vnd.oasis.opendocument.graphics-template",
	".odi":     "application/vnd.oasis.opendocument.image",
	".odp":     "application/vnd.oasis.opendocument.presentation",
	".otp":     "application/vnd.oasis.opendocument.presentation-template",
	".ods":     "application/vnd.oasis.opendocument.spreadsheet",
	".ots":     "application/vnd.oasis.opendocument.spreadsheet-template",
	".odt":     "application/vnd.oasis.opendocument.text",
	".odm":     "application/vnd.oasis.opendocument.text-master",
	".ott":     "application/vnd.oasis.opendocument.text-template",
	".oth":     "application/vnd.oasis.opendocument.text-web",
	".sxw":     "application/vnd.sun.xml.writer",
	".stw":     "application/vnd.sun.xml.writer.template",
	".sxc":     "application/vnd.sun.xml.calc",
	".stc":     "application/vnd.sun.xml.calc.template",
	".sxd":     "application/vnd.sun.xml.draw",
	".std":     "application/vnd.sun.xml.draw.template",
	".sxi":     "application/vnd.sun.xml.impress",
	".sti":     "application/vnd.sun.xml.impress.template",
	".sxg":     "application/vnd.sun.xml.writer.global",
	".sxm":     "application/vnd.sun.xml.math",
	".sis":     "application/vnd.symbian.install",
	".wbxml":   "application/vnd.wap.wbxml",
	".wmlc":    "application/vnd.wap.wmlc",
	".wmlsc":   "application/vnd.wap.wmlscriptc",
	".bcpio":   "application/x-bcpio",
	".torrent": "application/x-bittorrent",
	".bz2":     "application/x-bzip2",
	".vcd":     "application/x-cdlink",
	".pgn":     "application/x-chess-pgn",
	".cpio":    "application/x-cpio",
	".csh":     "application/x-csh",
	".dvi":     "application/x-dvi",
	".spl":     "application/x-futuresplash",
	".gtar":    "application/x-gtar",
	".hdf":     "application/x-hdf",
	".jar":     "application/x-java-archive",
	".jnlp":    "application/x-java-jnlp-file",
	".js":      "application/x-javascript",
	".ksp":     "application/x-kspread",
	".chrt":    "application/x-kchart",
	".kil":     "application/x-killustrator",
	".latex":   "application/x-latex",
	".rpm":     "application/x-rpm",
	".sh":      "application/x-sh",
	".shar":    "application/x-shar",
	".swf":     "application/x-shockwave-flash",
	".sit":     "application/x-stuffit",
	".sv4cpio": "application/x-sv4cpio",
	".sv4crc":  "application/x-sv4crc",
	".tar":     "application/x-tar",
	".tcl":     "application/x-tcl",
	".tex":     "application/x-tex",
	".man":     "application/x-troff-man",
	".me":      "application/x-troff-me",
	".ms":      "application/x-troff-ms",
	".ustar":   "application/x-ustar",
	".src":     "application/x-wais-source",
	".zip":     "application/zip",
	".m3u":     "audio/x-mpegurl",
	".ra":      "audio/x-pn-realaudio",
	".wav":     "audio/x-wav",
	".wma":     "audio/x-ms-wma",
	".wax":     "audio/x-ms-wax",
	".pdb":     "chemical/x-pdb",
	".xyz":     "chemical/x-xyz",
	".bmp":     "image/bmp",
	".gif":     "image/gif",
	".ief":     "image/ief",
	".png":     "image/png",
	".wbmp":    "image/vnd.wap.wbmp",
	".ras":     "image/x-cmu-raster",
	".pnm":     "image/x-portable-anymap",
	".pbm":     "image/x-portable-bitmap",
	".pgm":     "image/x-portable-graymap",
	".ppm":     "image/x-portable-pixmap",
	".rgb":     "image/x-rgb",
	".xbm":     "image/x-xbitmap",
	".xpm":     "image/x-xpixmap",
	".xwd":     "image/x-xwindowdump",
	".css":     "text/css",
	".rtx":     "text/richtext",
	".tsv":     "text/tab-separated-values",
	".jad":     "text/vnd.sun.j2me.app-descriptor",
	".wml":     "text/vnd.wap.wml",
	".wmls":    "text/vnd.wap.wmlscript",
	".etx":     "text/x-setext",
	".mxu":     "video/vnd.mpegurl",
	".flv":     "video/x-flv",
	".wm":      "video/x-ms-wm",
	".wmv":     "video/x-ms-wmv",
	".wmx":     "video/x-ms-wmx",
	".wvx":     "video/x-ms-wvx",
	".avi":     "video/x-msvideo",
	".movie":   "video/x-sgi-movie",
	".ice":     "x-conference/x-cooltalk",
	".3gp":     "video/3gpp",
	".ai":      "application/postscript",
	".aif":     "audio/x-aiff",
	".aifc":    "audio/x-aiff",
	".aiff":    "audio/x-aiff",
	".asc":     "text/plain",
	".atom":    "application/atom+xml",
	".au":      "audio/basic",
	".bin":     "application/octet-stream",
	".cdf":     "application/x-netcdf",
	".cgm":     "image/cgm",
	".class":   "application/octet-stream",
	".dcr":     "application/x-director",
	".dif":     "video/x-dv",
	".dir":     "application/x-director",
	".djv":     "image/vnd.djvu",
	".djvu":    "image/vnd.djvu",
	".dll":     "application/octet-stream",
	".dmg":     "application/octet-stream",
	".dms":     "application/octet-stream",
	".dtd":     "application/xml-dtd",
	".dv":      "video/x-dv",
	".dxr":     "application/x-director",
	".eps":     "application/postscript",
	".exe":     "application/octet-stream",
	".ez":      "application/andrew-inset",
	".gram":    "application/srgs",
	".grxml":   "application/srgs+xml",
	".gz":      "application/x-gzip",
	".htm":     "text/html",
	".html":    "text/html",
	".ico":     "image/x-icon",
	".ics":     "text/calendar",
	".ifb":     "text/calendar",
	".iges":    "model/iges",
	".igs":     "model/iges",
	".jp2":     "image/jp2",
	".jpe":     "image/jpeg",
	".jpeg":    "image/jpeg",
	".jpg":     "image/jpeg",
	".kar":     "audio/midi",
	".lha":     "application/octet-stream",
	".lzh":     "application/octet-stream",
	".m4a":     "audio/mp4a-latm",
	".m4p":     "audio/mp4a-latm",
	".m4u":     "video/vnd.mpegurl",
	".m4v":     "video/x-m4v",
	".mac":     "image/x-macpaint",
	".mathml":  "application/mathml+xml",
	".mesh":    "model/mesh",
	".mid":     "audio/midi",
	".midi":    "audio/midi",
	".mov":     "video/quicktime",
	".mp2":     "audio/mpeg",
	".mp3":     "audio/mpeg",
	".mp4":     "video/mp4",
	".mpe":     "video/mpeg",
	".mpeg":    "video/mpeg",
	".mpg":     "video/mpeg",
	".mpga":    "audio/mpeg",
	".msh":     "model/mesh",
	".nc":      "application/x-netcdf",
	".oda":     "application/oda",
	".ogv":     "video/ogv",
	".pct":     "image/pict",
	".pic":     "image/pict",
	".pict":    "image/pict",
	".pnt":     "image/x-macpaint",
	".pntg":    "image/x-macpaint",
	".ps":      "application/postscript",
	".qt":      "video/quicktime",
	".qti":     "image/x-quicktime",
	".qtif":    "image/x-quicktime",
	".ram":     "audio/x-pn-realaudio",
	".rdf":     "application/rdf+xml",
	".rm":      "application/vnd.rn-realmedia",
	".roff":    "application/x-troff",
	".sgm":     "text/sgml",
	".sgml":    "text/sgml",
	".silo":    "model/mesh",
	".skd":     "application/x-koan",
	".skm":     "application/x-koan",
	".skp":     "application/x-koan",
	".skt":     "application/x-koan",
	".smi":     "application/smil",
	".smil":    "application/smil",
	".snd":     "audio/basic",
	".so":      "application/octet-stream",
	".svg":     "image/svg+xml",
	".t":       "application/x-troff",
	".texi":    "application/x-texinfo",
	".texinfo": "application/x-texinfo",
	".tif":     "image/tiff",
	".tiff":    "image/tiff",
	".tr":      "application/x-troff",
	".txt":     "text/plain",
	".vrml":    "model/vrml",
	".vxml":    "application/voicexml+xml",
	".webm":    "video/webm",
	".wrl":     "model/vrml",
	".xht":     "application/xhtml+xml",
	".xhtml":   "application/xhtml+xml",
	".xml":     "application/xml",
	".xsl":     "application/xml",
	".xslt":    "application/xslt+xml",
	".xul":     "application/vnd.mozilla.xul+xml",
	".webp":    "image/webp",
}

// TypeByExtension returns the MIME type associated with the file extension ext.
// gets the file's MIME type for HTTP header Content-Type
func TypeByExtension(filePath string) string {
	typ := mime.TypeByExtension(path.Ext(filePath))
	if typ == "" {
		typ = extToMimeType[strings.ToLower(path.Ext(filePath))]
	}
	return typ
}
