    :type [s/Str]
    (s/optional-key :lvl) s/Int
    (s/optional-key :prerequisites) Prerequisite
-   (s/optional-key :bonuses) #{Bonus}})
+   (s/optional-key :effects) #{Effect}})
 
 (s/defschema Skill-Set
   {:id Skill-Set-Id

   :skills #{Skill-Id}
   :items #{Item-Id}})

(s/defschema Context
  (s/constrained
    {:kin {Kin-Id Kin}
     :castes {Caste-Id Caste-Id}
     :items {Item-Id Item}
     :skills {Skill-Id Skill}
     :skill-sets {Skill-Set-Id Skill-Set}
     :characters {Char-Id Character}}
    v/validate-compendium
    'Compendium))

(ns five-points.model
  (:require [schema.core :as s]
            [five-points.validate :as v])
  (:import (javafx.scene.effect Effect)
           (cljpdf.text Chapter)))

(s/defschema Kin-Id (s/constrained s/Str #(re-matches #"kin_[A-Za-z0-9]{10}" %) 'Kin-Id))

(s/defschema Caste-Id (s/constrained s/Str #(re-matches #"caste_[A-Za-z0-9]{10}" %) 'Caste-Id))

(s/defschema Skill-Id (s/constrained s/Str #(re-matches #"skill_[A-Za-z0-9]{10}" %) 'Skill-Id))

(s/defschema Skill-Set-Id (s/constrained s/Str #(re-matches #"skst_[A-Za-z0-9]{10}" %) 'Skill-Set-Id))

(s/defschema Item-Id (s/constrained s/Str #(re-matches #"item_[A-Za-z0-9]{10}" %) 'Item-Id))

(s/defschema Char-Id (s/constrained s/Str #(re-matches #"char_[A-Za-z0-9]{10}" %) 'Char-Id))

(s/defschema Check-Id (s/constrained s/Str #(re-matches #"chk_[A-Za-z0-9]{10}" %) 'Check-Id))

(s/defschema Damage-Id (s/constrained s/Str #(re-matches #"dmg_[A-Za-z0-9]{10}" %) 'Damage-Id))

(s/defschema Condition-Id (s/constrained s/Str #(re-matches #"cond_[A-Za-z0-9]{10}" %) 'Condition-Id))

(s/defschema Obstacle-Id (s/constrained s/Str #(re-matches #"obst_[A-Za-z0-9]{10}" %) 'Obstacle-Id))

(s/defschema Maze-Id (s/constrained s/Str #(re-matches #"maze_[A-Za-z0-9]{10}" %) 'Maze-Id))

(s/defschema Room-Id (s/constrained s/Str #(re-matches #"room_[A-Za-z0-9]{10}" %) 'Room-Id))

(s/defschema NPC-Id (s/constrained s/Str #(re-matches #"npc_[A-Za-z0-9]{10}" %) 'NPC-Id))

(s/defschema Question-Id (s/constrained s/Str #(re-matches #"q_[A-Za-z0-9]{10}" %) 'Question-Id))

(s/defschema GameTime {:value s/Int
                       :unit (s/enum :Minor-Action :Major-Action :Minute :Hour :Day :Month :Year)})
