package pwa

import (
	"github.com/photoprism/photoprism/pkg/clean"
	"github.com/photoprism/photoprism/pkg/list"
	"github.com/photoprism/photoprism/pkg/txt"
)

// Manifest represents a progressive web app manifest.
type Manifest struct {
	Name            string        `json:"name"`
	ShortName       string        `json:"short_name,omitempty"`
	Description     string        `json:"description,omitempty"`
	Categories      list.List     `json:"categories"`
	Display         string        `json:"display"`
	ThemeColor      string        `json:"theme_color"`
	BackgroundColor string        `json:"background_color"`
	Scope           string        `json:"scope"`
	StartUrl        string        `json:"start_url,omitempty"`
	Serviceworker   Serviceworker `json:"serviceworker,omitempty"`
	Permissions     list.List     `json:"permissions"`
	Icons           Icons         `json:"icons"`
}

// NewManifest creates a new progressive web app manifest based on the config provided.
func NewManifest(c Config) (m *Manifest) {
	return &Manifest{
		Name:            c.Name,
		ShortName:       txt.Clip(c.Name, 32),
		Description:     c.Description,
		Categories:      Categories,
		Display:         c.Mode,
		ThemeColor:      clean.Color(c.Color),
		BackgroundColor: clean.Color(c.Color),
		Scope:           c.BaseUri,
		StartUrl:        c.BaseUri + "library/",
		Serviceworker: Serviceworker{
			Src:      "sw.js",
			Scope:    c.BaseUri,
			UseCache: true,
		},
		Permissions: Permissions,
		Icons:       NewIcons(c.StaticUri, c.Icon),
	}
}
