/*
    Pan.do/ra Settings

    You can edit this file.
*/
{
    "additionalSort": [
        {"key": "director", "operator": "+"},
        {"key": "year", "operator": "-"},
        {"key": "title", "operator": "+"}
    ],
    "annotations": {
        "showUsers": false
    },
    "cantPlay": {
        "icon": "NoCopyright",
        "link": "/rights",
        "text": "This part of this video is not available in<br/>your part of your country. Sorry for that."
    },
    /*
        Capabilities are per user level.
        They can either be general:
            {level: true} means a user of that level has the capability)
        or related to items:
            {level: x} means a user of that level has the capability
            for items of a rights level up to and including x
    */
    "capabilities": {
        "canAddItems": {"staff": true, "admin": true},
        "canDownloadVideo": {"guest": -1, "member": -1, "friend": -1, "staff": -1, "admin": -1},
        "canEditAnnotations": {"staff": true, "admin": true},
        "canEditEvents": {"staff": true, "admin": true},
        "canEditFeaturedEdits": {"staff": true, "admin": true},
        "canEditFeaturedLists": {"staff": true, "admin": true},
        "canEditFeaturedTexts": {"staff": true, "admin": true},
        "canEditFiles": {"staff": true, "admin": true},
        "canEditMetadata": {"staff": true, "admin": true},
        "canEditPlaces": {"staff": true, "admin": true},
        "canEditSitePages": {"staff": true, "admin": true},
        "canEditUsers": {"admin": true},
        "canImportAnnotations": {},
        "canManageFiles": {"staff": true, "admin": true},
        "canManagePlacesAndEvents": {"staff": true, "admin": true},
        "canManageTitlesAndNames": {"staff": true, "admin": true},
        "canManageUsers": {"staff": true, "admin": true},
        "canPlayClips": {"guest": 2, "member": 2, "friend": 4, "staff": 4, "admin": 4},
        "canPlayVideo": {"guest": 1, "member": 1, "friend": 4, "staff": 4, "admin": 4},
        "canReadText": {"guest": 0, "member": 0, "friend": 1, "staff": 1, "admin": 1},
        "canRemoveItems": {"admin": true},
        "canSeeAccessed": {"staff": true, "admin": true},
        "canSeeDebugMenu": {"staff": true, "admin": true},
        "canSeeExtraItemViews": {"staff": true, "admin": true},
        "canSeeFiles": {"staff": true, "admin": true},
        "canSeeItem": {"guest": 3, "member": 3, "friend": 4, "staff": 4, "admin": 4},
        "canSeeSize": {"friend": true, "staff": true, "admin": true},
        "canSeeSoftwareVersion": {"staff": true, "admin": true},
        "canSendMail": {"staff": true, "admin": true}
    },
    /*
        clipKeys are the properties that clips can be sorted by.
        If sortOperator is not specified, it will be + for strings and - for numbers.
    */
    "clipKeys": [
        {"id": "text", "title": "Text", "type": "string"},
        {"id": "position", "title": "Position", "type": "float", "sortOperator": "+"},
        {"id": "duration", "title": "Duration", "type": "float"},
        {"id": "hue", "title": "Hue", "type": "float", "sortOperator": "+"},
        {"id": "saturation", "title": "Saturation", "type": "float"},
        {"id": "lightness", "title": "Lightness", "type": "float"},
        {"id": "volume", "title": "Volume", "type": "float"}
    ],
    /*
        clipLayers is the ordered list of public layers that will appear as the
        text of clips. Excluding a layer from this list means it will not be
        included in find annotations.
    */
    "clipLayers": ["subtitles"],
    // fixme: either this, or filter: true in itemKeys, but not both
    "filters": [
        {"id": "director", "title": "Director", "type": "string"},
        {"id": "country", "title": "Country", "type": "string"},
        {"id": "year", "title": "Year", "type": "integer"},
        {"id": "language", "title": "Language", "type": "string"},
        {"id": "genre", "title": "Genre", "type": "string"},
        {"id": "writer", "title": "Writer", "type": "string"},
        {"id": "producer", "title": "Producer", "type": "string"},
        {"id": "cinematographer", "title": "Cinematographer", "type": "string"},
        {"id": "editor", "title": "Editor", "type": "string"},
        {"id": "actor", "title": "Actor", "type": "string"},
        {"id": "keyword", "title": "Keyword", "type": "string"}
    ],
    "flags": true,
    "help": [
        {"id": "help", "title": "Help"},
        {"id": "accounts", "title": "Accounts"},
        {"id": "navigation", "title": "Navigation"},
        {"id": "views", "title": "Views"},
        {"id": "timelines", "title": "Timelines"},
        {"id": "clips", "title": "Clips"},
        {"id": "maps", "title": "Maps"},
        {"id": "calendars", "title": "Calendars"},
        {"id": "find", "title": "Find"},
        {"id": "filters", "title": "Filters"},
        {"id": "lists", "title": "Lists"},
        {"id": "player", "title": "Player"},
        {"id": "editor", "title": "Editor"},
        {"id": "edits", "title": "Edits"},
        {"id": "texts", "title": "Texts"},
        {"id": "embeds", "title": "Embeds"}
    ],
    /*
        An itemKey must have the following properties:
            id: The id of the key (as known by the server)
            title: The title of the key (as displayed by the client)
            type: text, string, float, integer, or array of any of these
        and can have any of the following properties:
            autocomplete: If true, find element will autocomplete
            autocompleteSortKey: The key that suggestions will be sorted by
            capability: A capability required to see this key
            columnRequired: If true, the column can't be removed
            columnWidth: Default column width in px
            filter: If true, one can filter results by this key
            find: If true, this key will appear as a find option
            format: {type: "...", args: [...]}, for special formatting
                (Ox.formatType(args) will be called)
            secondaryId: If true, loading /value will redirect to the item
            sort: If true, one can sort results by this key
            sortOperator: sort operator (+, -), in case it differs from the
                default for the key's type (+ for strings, - for numbers)
            sortType: special sort type (title, person)
            value: {key: "...", type: "..."}, for keys that are derived
                from other keys (like number of actors), or "capability"
    */
    "itemKeys": [
        {
            "id": "*",
            "title": "All",
            "type": "text",
            "find": true
        },
        {
            "id": "title",
            "title": "Title",
            "type": "string",
            "additionalSort": [{"key": "year", "operator": "-"}, {"key": "director", "operator": "+"}],
            "autocomplete": true,
            "autocompleteSortKey": "votes",
            "columnRequired": true,
            "columnWidth": 180,
            "find": true,
            "sort": true,
            "sortType": "title"
        },
        {
            "id": "director",
            "title": "Director",
            "type": ["string"],
            "additionalSort": [{"key": "year", "operator": "-"}, {"key": "title", "operator": "-"}],
            "autocomplete": true,
            "columnRequired": true,
            "columnWidth": 180,
            "filter": true,
            "find": true,
            "sort": true,
            "sortType": "person"
        },
        {
            "id": "country",
            "title": "Country",
            "type": ["string"],
            "autocomplete": true,
            "columnWidth": 120,
            "filter": true,
            "find": true,
            "sort": true
        },
        {
            "id": "year",
            "title": "Year",
            "type": "year",
            "additionalSort": [{"key": "director", "operator": "+"}, {"key": "title", "operator": "+"}],
            "autocomplete": true,
            "columnWidth": 60,
            "filter": true,
            "find": true,
            "sort": true
        },
        {
            "id": "language",
            "title": "Language",
            "type": ["string"],
            "autocomplete": true,
            "columnWidth": 120,
            "filter": true,
            "find": true,
            "sort": true
        },
        {
            "id": "runtime", 
            "title": "Runtime", 
            "type": "time",
            "columnWidth": 60,
            "format": {"type": "duration", "args": [0, "short"]},
            "sort": true
        },
        {
            "id": "writer",
            "title": "Writer",
            "type": ["string"],
            "autocomplete": true,
            "columnWidth": 180,
            "filter": true,
            "find": true,
            "sort": true,
            "sortType": "person"
        },
        {
            "id": "producer",
            "title": "Producer",
            "type": ["string"],
            "autocomplete": true,
            "columnWidth": 180,
            "filter": true,
            "find": true,
            "sort": true,
            "sortType": "person"
        },
        {
            "id": "cinematographer",
            "title": "Cinematographer",
            "type": ["string"],
            "autocomplete": true,
            "columnWidth": 180,
            "filter": true,
            "find": true,
            "sort": true,
            "sortType": "person"
        },
        {
            "id": "editor",
            "title": "Editor",
            "type": ["string"],
            "autocomplete": true,
            "columnWidth": 180,
            "filter": true,
            "find": true,
            "sort": true,
            "sortType": "person"
        },
        {
            "id": "actor",
            "title": "Actor",
            "type": ["string"],
            "autocomplete": true,
            "filter": true,
            "find": true,
            "sortType": "person"
        },
        {
            "id": "numberofactors",
            "title": "Number of Actors",
            "type": "integer",
            "columnWidth": 60,
            "sort": true,
            "value": {"key": "actor", "type": "length"}
        },
        {
            "id": "character", 
            "title": "Character", 
            "type": ["string"],
            "autocomplete": true,
            "find": true,
            "sortType": "string"
        },
        {
            "id": "name",
            "title": "Name",
            "type": ["string"],
            "autocomplete": true,
            "find": true
        },
        {
            "id": "series",
            "title": "TV Series",
            "type": "boolean"
        },
        {
            "id": "genre", 
            "title": "Genre",
            "type": ["string"],
            "autocomplete": true,
            "columnWidth": 120,
            "filter": true,
            "find": true,
            "sort": true
        },
        {
            "id": "keyword", 
            "title": "Keyword",
            "type": ["string"],
            "autocomplete": true,
            "filter": true,
            "find": true
        },
        {
            "id": "summary",
            "title": "Summary",
            "type": "text",
            "find": true
        },
        {
            "id": "trivia",
            "title": "Trivia",
            "type": ["text"]
        },
        {
            "id": "releasedate",
            "title": "Release Date",
            "type": "date",
            "columnWidth": 120,
            "format": {"type": "date", "args": ["%a, %b %e, %Y"]},
            "sort": true
        },
        {
            "id": "budget",
            "title": "Budget",
            "type": "integer",
            "columnWidth": 90,
            "format": {"type": "unit", "args": ["$"]},
            "sort": true
        },
        {
            "id": "gross",
            "title": "Gross",
            "type": "integer",
            "columnWidth": 90,
            "format": {"type": "unit", "args": ["$"]},
            "sort": true
        },
        {
            "id": "profit",
            "title": "Profit",
            "type": "integer",
            "columnWidth": 90,
            "format": {"type": "unit", "args": ["$"]},
            "sort": true
        },
        {
            "id": "votes",
            "title": "Mainstream Score",
            "type": "float",
            "columnWidth": 60,
            "format": {"type": "ColorPercent", "args": [1, true]},
            "sort": true
        },
        {
            "id": "likes",
            "title": "Arthouse Score",
            "type": "float",
            "columnWidth": 60,
            "format": {"type": "ColorPercent", "args": [1, true]},
            "sort": true
        },
        {
            "id": "notes",
            "title": "Notes",
            "type": "text",
            "capability": "canEditMetadata"
        },
        {
            "id": "id",
            "title": "ID",
            "type": "string",
            "columnWidth": 90,
            "sort": true
        },
        {
            "id": "subtitles",
            "title": "Subtitles",
            "type": "layer",
            "find": true
        },
        {
            "id": "duration",
            "title": "Duration",
            "type": "time",
            "columnWidth": 90,
            "format": {"type": "duration", "args": []},
            "sort": true
        },
        {
            "id": "resolution",
            "title": "Resolution",
            "type": ["integer"],
            "capability": "canSeeFiles",
            "columnWidth": 90,
            "format": {"type": "resolution", "args": ["px"]},
            "sort": true
        },
        {
            "id": "aspectratio",
            "title": "Aspect Ratio",
            "type": "float",
            "columnWidth": 90,
            "format": {"type": "unit", "args": [":1", 3]},
            "sort": true
        },
        {
            "id": "pixels",
            "title": "Pixels",
            "type": "integer",
            "capability": "canSeeFiles",
            "columnWidth": 90,
            "format": {"type": "value", "args": ["px"]},
            "sort": true
        },
        {
            "id": "hue",
            "title": "Hue",
            "type": "float",
            "columnWidth": 90,
            "format": {"type": "color", "args": ["hue"]},
            "sort": true,
            "sortOperator": "+"
        },
        {
            "id": "saturation",
            "title": "Saturation",
            "type": "float",
            "columnWidth": 90,
            "format": {"type": "color", "args": ["saturation"]},
            "sort": true
        },
        {
            "id": "lightness",
            "title": "Lightness",
            "type": "float",
            "columnWidth": 90,
            "format": {"type": "color", "args": ["lightness"]},
            "sort": true
        },
        {
            "id": "volume",
            "title": "Volume",
            "type": "float",
            "columnWidth": 60,
            "format": {"type": "color", "args": ["lightness"]},
            "sort": true
        },
        {
            "id": "numberofcuts",
            "title": "Number of Cuts",
            "type": "integer",
            "columnWidth": 60,
            "format": {"type": "number", "args": []},
            "sort": true,
            "value": {"key": "cuts", "type": "length"}
        },
        {
            "id": "cutsperminute",
            "title": "Cuts per Minute",
            "type": "float",
            "columnWidth": 60,
            "format": {"type": "number", "args": [3]},
            "sort": true,
            "value": {"key": "cuts", "type": "lengthperminute"}
        },
        {
            "id": "words",
            "title": "Number of Words",
            "type": "integer",
            "columnWidth": 60,
            "format": {"type": "number", "args": []},
            "sort": true,
            "value": {"layer": "subtitles", "type": "words"}
        },
        {
            "id": "wordsperminute",
            "title": "Words per Minute",
            "type": "float",
            "columnWidth": 60,
            "format": {"type": "number", "args": [3]},
            "sort": true,
            "value": {"layer": "subtitles", "type": "wordsperminute"}
        },
        {
            "id": "size",
            "title": "Size",
            "type": "integer",
            "capability": "canSeeSize",
            "columnWidth": 60,
            "format": {"type": "value", "args": ["B"]},
            "sort": true
        },
        {
            "id": "bitrate",
            "title": "Bitrate",
            "type": "integer",
            "capability": "canSeeFiles",
            "columnWidth": 60,
            "format": {"type": "value", "args": ["bps"]},
            "sort": true
        },
        {
            "id": "parts",
            "title": "Number of Parts",
            "type": "integer",
            "capability": "canSeeFiles",
            "columnWidth": 60,
            "sort": true
        },
        {
            "id": "numberoffiles",
            "title": "Number of Files",
            "type": "integer",
            "capability": "canSeeFiles",
            "columnWidth": 60,
            "sort": true,
            "value": {"key": "files", "type": "length"}
        },
        {
            "id": "filename",
            "title": "Filename",
            "type": ["string"],
            "capability": "canSeeFiles",
            "find": true
        },
        {
            "id": "created",
            "title": "Date Created",
            "type": "date",
            "columnWidth": 150,
            "format": {"type": "date", "args": ["%Y-%m-%d %H:%M:%S"]},
            "sort": true
        },
        {
            "id": "modified",
            "title": "Last Modified",
            "type": "date",
            "columnWidth": 150,
            "format": {"type": "date", "args": ["%Y-%m-%d %H:%M:%S"]},
            "sort": true
        },
        {
            "id": "accessed",
            "title": "Last Accessed",
            "type": "date",
            "capability": "canSeeAccessed",
            "columnWidth": 150,
            "format": {"type": "date", "args": ["%Y-%m-%d %H:%M:%S"]},
            "sort": true
        },
        {
            "id": "timesaccessed",
            "title": "Times Accessed",
            "type": "integer",
            "capability": "canSeeAccessed",
            "columnWidth": 60,
            "sort": true
        },
        {
            "id": "rightslevel",
            "title": "Rights Level",
            "type": "enum",
            "columnWidth": 90,
            "format": {"type": "ColorLevel", "args": [
                ["Public", "Relaxed", "Regular", "Restricted", "Private"]
            ]},
            "sort": true,
            "sortOperator": "+",
            "values": ["Public", "Relaxed", "Regular", "Restricted", "Private", "Unknown"]
        },
        {
            "id": "canplayvideo",
            "title": "Can Play Video",
            "type": "boolean",
            "value": "capability"
        },
        {
            "id": "canplayclips",
            "title": "Can Play Clips",
            "type": "boolean",
            "value": "capability"
        },
        {
            "id": "random",
            "title": "Random",
            "type": "integer",
            "sort": true
        }
    ],
    /*
        itemName specifies how items are being referred to.
        Anything excessively long may cause layout errors.
    */
    "itemName": {
        "singular": "Movie",
        "plural": "Movies"
    },
    "itemRequiresVideo": true,
    "itemViews": [
        {"id": "info", "title": "Info"},
        {"id": "player", "title": "Player"},
        {"id": "editor", "title": "Editor"},
        {"id": "timeline", "title": "Timeline"},
        {"id": "clips", "title": "Clips"},
        {"id": "map", "title": "Map"},
        {"id": "calendar", "title": "Calendar"},
        {"id": "data", "title": "Data"},
        {"id": "files", "title": "Files"}
    ],
    // fixme: should be renamed to annotationLayers
    "layers": [
        {
            "id": "privatenotes",
            "title": "Private Notes",
            "canAddAnnotations": {"member": true, "friend": true, "staff": true, "admin": true},
            "item": "Private Note",
            "overlap": true,
            "private": true,
            "showInfo": true,
            "type": "text"
        },
        {
            "id": "publicnotes",
            "title": "Public Notes",
            "canAddAnnotations": {"member": true, "friend": true, "staff": true, "admin": true},
            "item": "Public Note",
            "overlap": true,
            "showInfo": true,
            "type": "text"
        },
        {
            "id": "subtitles",
            "title": "Subtitles",
            "canAddAnnotations": {"staff": true, "admin": true},
            "hasEvents": true,
            "hasPlaces": true,
            "isSubtitles": true,
            "item": "Subtitle",
            "type": "text"
        }
    ],
    "listViews": [
        {"id": "list", "title": "as List"},
        {"id": "grid", "title": "as Grid"},
        //{"id": "info", "title": "with Info"},
        {"id": "timelines", "title": "with Timelines"},
        {"id": "clips", "title": "with Clips"},
        //{"id": "maps", "title": "with Maps"},
        //{"id": "calendars", "title": "with Calendars"},
        {"id": "clip", "title": "as Clips"},
        //{"id": "video", "title": "as Video"},
        {"id": "map", "title": "on Map"},
        {"id": "calendar", "title": "on Calendar"}
    ],
    "media": {
        "importPosters": true,
        "importFrames": true
    },
    "personalLists": [
        {"title": "Favorites"},
        {"title": "1960s", "query": {"conditions": [{"key": "year", "value": ["1960", "1970"], "operator": "="}], "operator": "&"}}
        //{"title": "Movies with Video", "query": {"conditions": [{"key": "canplayvideo", "value": "true", "operator": "="}], "operator": "&"}},
        //{"title": "Movies with Clips", "query": {"conditions": [{"key": "canplayclips", "value": "true", "operator": "="}], "operator": "&"}}
    ],
    "rightsLevel": {"member": 4, "staff": 3, "admin": 2},
    "rightsLevels": [
        {"name": "Public", "color": [128, 255, 128]},
        {"name": "Relaxed", "color": [192, 255, 128]},
        {"name": "Regular", "color": [255, 255, 128]},
        {"name": "Restricted", "color": [255, 192, 128]},
        {"name": "Private", "color": [255, 128, 128]}
    ],
    "sendReferrer": false,
    "site": {
        "description": "0xDB is an experimental - and to some degree imaginary - movie database. It is intended to help us rethink the future of cinema on the Internet, just as it tries to push the boundaries of what we understand as \"web applications\". What 0xDB proposes is an entirely new approach to visualizing and navigating moving images, and we hope that it can serve as a point of reference for individuals and institutions who are dealing with large collections of films.",
        // FIXME: "from" and "to" would be more intuitive as keys here
        "email": {
            // E-mail address in contact form (to)
            "contact": "0xDB@0xDB.org",
            "footer": "-- \n0xDB - https://0xDB.org",
            "prefix": "0xDB Newsletter -",
            // E-mail address uses by the system (from)
            "system": "0xDB@0xDB.org"
        },
        "https": true,
        "id": "0xdb",
        "name": "0xDB",
        "url": "0xDB.org",
        "videoprefix": ""
    },
    "sitePages": [
        {"id": "about", "title": "About"},
        {"id": "news", "title": "News"},
        // {"id": "tour", "title": "Take a Tour"},
        {"id": "faq", "title": "Frequently Asked Questions"},
        {"id": "terms", "title": "Terms of Service"},
        {"id": "rights", "title": "Rights Management"},
        {"id": "contact", "title": "Contact"}
    ],
    "sites": [
        {"name": "Indiancine.ma", "url": "indiancine.ma", "https": true},
        {"name": "Pad.ma", "url": "pad.ma", "https": true}
    ],
    "textRightsLevels": [
        {"name": "Public", "color": [128, 255, 128]},
        {"name": "Private", "color": [255, 128, 128]}
    ],
    "themes": ["oxlight", "oxmedium", "oxdark"],
    "timelines": [
        {"id": "antialias", "title": "Anti-Alias"},
        {"id": "slitscan", "title": "Slit-Scan"},
        {"id": "keyframes", "title": "Keyframes"},
        {"id": "audio", "title": "Waveform"}
    ],
    "totals": [
        {"id": "items"},
        {"id": "runtime"},
        {"id": "files", "admin": true},
        {"id": "duration", "admin": true},
        {"id": "size", "admin": true},
        {"id": "pixels"}
    ],
    "tv": {
        "showLogo": false
    },
    "user": {
        "level": "guest",
        "newsletter": true,
        "ui": {
            "annotationsFont": "small",
            "annotationsRange": "all",
            "annotationsSize": 256,
            "annotationsSort": "position",
            "calendarFind": "",
            "calendarSelection": "",
            "clipsColumns": 2,
            "columns": {
                "Colors": {
                    "columns": ["title", "director", "country", "year", "hue", "saturation", "brightness"],
                    "columnWidth": {}
                }
            },
            "edit": "",
            "embedSize": 256,
            "filters": [
                {"id": "director", "sort": [{"key": "items", "operator": "-"}]},
                {"id": "country", "sort": [{"key": "items", "operator": "-"}]},
                {"id": "year", "sort": [{"key": "name", "operator": "-"}]},
                {"id": "language", "sort": [{"key": "items", "operator": "-"}]},
                {"id": "genre", "sort": [{"key": "items", "operator": "-"}]}
            ],
            "filtersSize": 176,
            "find": {"conditions": [], "operator": "&"},
            "followPlayer": true,
            "help": "",
            "hash": {"anchor": "", "query": []},
            "icons": "posters",
            "infoIconSize": 256,
            "item": "",
            "itemFind": "",
            "itemSort": [{"key": "position", "operator": "+"}],
            "itemView": "info",
            "listColumns": ["title", "director", "country", "year", "language", "runtime", "genre"],
            "listColumnWidth": {},
            "listSelection": [],
            "listSort": [{"key": "director", "operator": "+"}],
            "listView": "grid",
            "lists": {},
            "mapFind": "",
            "mapSelection": "",
            "page": "",
            "section": "items",
            "sequenceMode": "shape",
            "sequenceSort": [{"key": "director", "operator": "+"}],
            "showAdvancedEmbedOptions": false,
            "showAnnotations": true,
            "showBrowser": true,
            "showCalendarControls": true, // fixme: should be false
            "showFilters": true,
            "showHome": true,
            "showIconBrowser": false,
            "showInfo": true,
            "showLayers": {
                "privatenotes": true,
                "publicnotes": true,
                "subtitles": true
            },
            "showMapControls": false,
            "showMapLabels": false,
            "showFolder": {
                "items": {
                    "personal": true,
                    "favorite": true,
                    "featured": true,
                    "volumes": true
                },
                "texts": {
                    "personal": true,
                    "favorite": true,
                    "featured": true
                }
            },
            "showSidebar": true,
            "showSitePosters": false,
            "showTimeline": true,
            "sidebarSize": 256,
            "text": "",
            "textPositions": {},
            "theme": "oxdark",
            "updateAdvancedFindResults": false,
            "videoMuted": false,
            "videoPoints": {},
            "videoResolution": 96,
            "videoScale": "fit",
            "videoSize": "small",
            "videoSubtitles": true,
            "videoTimeline": "antialias",
            "videoView": "player",
            "videoVolume": 1
        },
        "username": "",
        "volumes": []
    },
    // fixme: this should include colors
    "userLevels": ["guest", "member", "friend", "staff", "admin"],
    "video": {
        "download": false,
        "formats": ["webm", "mp4"],
        "previewRatio": 1.7777777778,
        "resolutions": [96]
    }
}
