# Copyright (c) 2020 Red Hat, Inc.

# Copyright Contributors to the Open Cluster Management project

# Dynamic user preference data
# The CR will be created with the name of the user who will access the information
# CR will hold info such as saved searches, homepage, search history etc.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  # name must match the spec fields below, and be in the form: <plural>.<group>
  name: userpreferences.console.open-cluster-management.io
spec:
  # group name to use for REST API: /apis/<group>/<version>
  group: console.open-cluster-management.io
  # list of versions supported by this CustomResourceDefinition
  versions:
    - name: v1
      # Each version can be enabled/disabled by Served flag.
      served: true
      # One and only one version must be marked as the storage version.
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                savedSearches: # Saved user searches to be displayed on main search page
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                      searchText:
                        type: string
                      name:
                        type: string
                      description:
                        type: string
  # either Namespaced or Cluster
  scope: Cluster
  names:
    # plural name to be used in the URL: /apis/<group>/<version>/<plural>
    plural: userpreferences
    # singular name to be used as an alias on the CLI and for display
    singular: userpreference
    # kind is normally the CamelCased singular type. Your resource manifests use this.
    kind: UserPreference

  # TODO Need to see if we can have a non-structural schema that leaves this CR dynamica to new user preferences?
  # validation:
  #   openAPIV3Schema:
  #     type: object
  #     properties:
  #       spec:
  #         type: object
  #         properties:
  #           savedSearches: # Saved user searches to be displayed on main search page
  #             type: array
  #             items:
  #               type: object
  #               properties:
  #                 id:
  #                   type: string
  #                 searchText:
  #                   type: string
  #                 name:
  #                   type: string
  #                 description:
  #                   type: string
  #           homepage: # User is able to set a homepage that creates a link on header icon
  #             type: string

  #           TODO - implement recent search history data for recomended searches
  #           searchHistory:
  #             type: array
  #             items:
  #               type: object
  #               properties:
  #                 searchText:
  #                   type: string 
