module Etiquette where
open import Data.Nat
open import Data.String
open import Data.Maybe
open import Data.List
open import Data.List.Any
open Data.List.Any.Membership-≡
open import Level
open import Relation.Binary.PropositionalEquality hiding ([_])
open import Data.Unit
open import Data.Empty
open import Relation.Nullary
open import Relation.Nullary.Decidable
import Relation.Binary.PropositionalEquality as PropEq
open import Data.Bool
open import Data.List.Any.Properties
open import Tree
Restrictions : Set
Restrictions = List String
data Message : Set where
message : (text : String) → (restrictions : Restrictions) → Message
∈-sb : String → List String → Bool
∈-sb x [] = false
∈-sb x (x₁ ∷ l) = if (x == x₁) then true else (∈-sb x l)
⊆-sb : List String → List String → Bool
⊆-sb [] l₂ = true
⊆-sb (x ∷ l₁) l₂ = ∈-sb x l₂ ∧ ⊆-sb l₁ l₂
validate-reply : Maybe Message → Message → Bool
validate-reply (just (message _ r₁)) (message _ r₂) = ⊆-sb r₂ r₁
validate-reply nothing _ = true
MessageTree : Set
MessageTree = Tree Message validate-reply nothing
MessageForest : Restrictions → Set
MessageForest r = Forest Message validate-reply (message "" r)
user-view-property : Restrictions → Maybe Message → Message → Bool
user-view-property u (just (message t₁ r₁)) (message t₂ r₂) = (⊆-sb u r₂) ∧ (⊆-sb r₂ r₁)
user-view-property u nothing (message t₂ r₂) = ⊆-sb u r₂
MessageTreeView : Restrictions → Set
MessageTreeView user-restrictions = Tree Message (user-view-property user-restrictions) nothing
MessageForestView : Restrictions → Restrictions → Set
MessageForestView gr ur = Forest Message (user-view-property ur) (message "" gr)
view : {i u : Restrictions} → MessageForest i → MessageForestView i u
view = forest-cut