# ===============================================
# STORAGE
# ===============================================

extend type Query {
  storage: StorageQuery
}

extend type Mutation {
  storage: StorageMutation
}

# -----------------------------------------------
# QUERIES
# -----------------------------------------------

type StorageQuery {
  targets(
    filter: String
    orderBy: String
  ): [StorageTarget] @auth(requires: ["manage:system"])

  status: [StorageStatus] @auth(requires: ["manage:system"])
}

# -----------------------------------------------
# MUTATIONS
# -----------------------------------------------

type StorageMutation {
  updateTargets(
    targets: [StorageTargetInput]!
  ): DefaultResponse @auth(requires: ["manage:system"])

  executeAction(
    targetKey: String!
    handler: String!
  ): DefaultResponse @auth(requires: ["manage:system"])
}

# -----------------------------------------------
# TYPES
# -----------------------------------------------

type StorageTarget {
  isAvailable: Boolean!
  isEnabled: Boolean!
  key: String!
  title: String!
  description: String
  logo: String
  website: String
  supportedModes: [String]
  mode: String
  hasSchedule: Boolean!
  syncInterval: String
  syncIntervalDefault: String
  config: [KeyValuePair]
  actions: [StorageTargetAction]
}

input StorageTargetInput {
  isEnabled: Boolean!
  key: String!
  mode: String!
  syncInterval: String
  config: [KeyValuePairInput]
}

type StorageStatus {
  key: String!
  title: String!
  status: String!
  message: String!
  lastAttempt: String!
}

type StorageTargetAction {
  handler: String!
  label: String!
  hint: String!
}
