require 'dry/validation'
require 'dry/validation/schema'

module Locabulary
  # Responsible for providing a defined and clear schema for each of the locabulary items.
  Schema = Dry::Validation.Schema do
    key(:predicate_name).required(format?: /\A[a-z_]+\Z/)
    key(:values).each do
      key(:term_label).required(:str?)
      optional(:description).maybe(:str?)
      optional(:grouping).maybe(:str?)
      optional(:affiliation).maybe(:str?)
      optional(:default_presentation_sequence).maybe(:int?)
      key(:activated_on).required(format?: /\A\d{4}-\d{2}-\d{2}\Z/)
      optional(:deactivated_on).maybe(format?: /\A\d{4}-\d{2}-\d{2}\Z/)
    end
  end
end