package contented

import (
	"fmt"
	"html"
	"log"
	"net/http"
	"os"
	"strings"
	"time"
)

func (this *Server) handlePreview(w http.ResponseWriter, fileIDList string) {

	fileIDs := strings.Split(fileIDList, `-`)

	tmpl := `<!DOCTYPE html>
<html>
	<head>
		<title>` + html.EscapeString(this.opts.ServerPublicProperties.AppTitle) + `</title>
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<style type="text/css">
html, body {
	background: #333;
	color: #F0F0F0;
	font-family: sans-serif;
}
.entry {
	display: inline-block;
	margin: 4px;
	border-radius: 4px;
	max-width: 340px;
}
.thumbnail {
	line-height: 0;
	width: 340px;
	text-align: center;
}
.properties {
	background: #000;
	padding: 4px;
	word-break: break-word;
}

		</style>
	</head>
	<body>
		<div class="container">
	`

	for _, fileID := range fileIDs {
		m, err := this.Metadata(fileID)
		if err != nil {
			if os.IsNotExist(err) {
				http.Error(w, "Not found", 404)
				return
			}

			log.Println(err.Error())
			http.Error(w, "Internal error", 500)
			return
		}

		tmpl += `
			<div class="entry">			
				<div class="thumbnail">
					<a href="` + html.EscapeString(`/get/`+fileID) + `"><img src="` + html.EscapeString(`/thumb/m/`+fileID) + `"></a>
				</div>
				<div class="properties">
					<b>Name:</b> ` + html.EscapeString(m.Filename) + `<br>
					<b>Hash:</b> <span title="` + html.EscapeString(m.FileHash) + `">hover</span><br>
					<b>File type:</b> ` + html.EscapeString(m.MimeType) + `<br>
					<b>Size:</b> ` + html.EscapeString(fmt.Sprintf("%d", m.FileSize)) + `<br>
					<b>Uploader:</b> ` + html.EscapeString(m.UploadIP) + `<br>
					<b>Uploaded at:</b> ` + html.EscapeString(m.UploadTime.Format(time.RFC3339)) + `<br>
				</div>
			</div>
		`
	}

	if this.opts.EnableHomepage {
		tmpl += `
			<div class="return">
				<button onclick="window.location.href='/'">Again...</button>
			</div>
		`
	}
	tmpl += `
		</div>
	</body>
</html>`

	w.Header().Set(`Content-Type`, `text/html; charset=UTF-8`)
	w.Header().Set(`Content-Length`, fmt.Sprintf("%d", len(tmpl)))
	w.WriteHeader(200)
	w.Write([]byte(tmpl))
}