' C4-PlantUML, version 1.0.0
' https://github.com/RicardoNiepel/C4-PlantUML

' Colors
' ##################################

!global $ELEMENT_FONT_COLOR = "#FFFFFF"

' Styling
' ##################################

!global $TECHN_FONT_SIZE = 12

skinparam defaultTextAlignment center

skinparam wrapWidth 200
skinparam maxMessageSize 150

skinparam rectangle {
    StereotypeFontSize 12
    shadowing false
}

skinparam database {
    StereotypeFontSize 12
    shadowing false
}

skinparam Arrow {
    Color #666666
    FontColor #666666
    FontSize 12
}

skinparam rectangle<<boundary>> {
    Shadowing false
    StereotypeFontSize 0
    FontColor #444444
    BorderColor #444444
    BorderStyle dashed
}

' Layout
' ##################################

!function LAYOUT_AS_SKETCH()
skinparam backgroundColor #EEEBDC
skinparam handwritten true
skinparam defaultFontName "Comic Sans MS"
center footer <font color=red>Warning:</font> Created for discussion, needs to be validated
!endfunction

!function LAYOUT_TOP_DOWN()
top to bottom direction
!endfunction

!function LAYOUT_LEFT_RIGHT() 
left to right direction
!endfunction

' Boundaries
' ##################################

!unquoted function Boundary($alias, $label)
!return 'rectangle "=='+$label+'" <<boundary>> as '+$alias
!endfunction
!unquoted function Boundary($alias, $label, $type)
!return 'rectangle "=='+$label+'\n<size:'+$TECHN_FONT_SIZE+'>['+$type+']</size>" <<boundary>> as '+$alias
!endfunction

' Relationship
' ##################################

!unquoted function Rel_($alias1, $alias2, $label, $direction="")
$alias1 $direction $alias2 : **$label**
!endfunction
!unquoted function Rel_($alias1, $alias2, $label, $techn, $direction="")
$alias1 $direction $alias2 : **$label**\n//<size:$TECHN_FONT_SIZE>[$techn]</size>//
!endfunction

!unquoted function Rel($from, $to, $label)
Rel_($from, $to, $label, "-->>")
!endfunction
!unquoted function Rel($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "-->>")
!endfunction

!unquoted function Rel_Back($from, $to, $label)
Rel_($from, $to, $label, "<<--")
!endfunction
!unquoted function Rel_Back($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "<<--")
!endfunction

!unquoted function Rel_Neighbor($from, $to, $label)
Rel_($from, $to, $label, "->>")
!endfunction
!unquoted function Rel_Neighbor($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "->>")
!endfunction

!unquoted function Rel_Back_Neighbor($from, $to, $label)
Rel_($from, $to, $label, "<<-")
!endfunction
!unquoted function Rel_Back_Neighbor($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "<<-")
!endfunction

!unquoted function Rel_D($from, $to, $label)
Rel_($from, $to, $label, "-DOWN->>")
!endfunction
!unquoted function Rel_D($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "-DOWN->>")
!endfunction
!unquoted function Rel_Down($from, $to, $label)
Rel_($from, $to, $label, "-DOWN->>")
!endfunction
!unquoted function Rel_Down($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "-DOWN->>")
!endfunction

!unquoted function Rel_U($from, $to, $label)
Rel_($from, $to, $label, "-UP->>")
!endfunction
!unquoted function Rel_U($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "-UP->>")
!endfunction
!unquoted function Rel_Up($from, $to, $label)
Rel_($from, $to, $label, "-UP->>")
!endfunction
!unquoted function Rel_Up($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "-UP->>")
!endfunction

!unquoted function Rel_L($from, $to, $label)
Rel_($from, $to, $label, "-LEFT->>")
!endfunction
!unquoted function Rel_L($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "-LEFT->>")
!endfunction
!unquoted function Rel_Left($from, $to, $label)
Rel_($from, $to, $label, "-LEFT->>")
!endfunction
!unquoted function Rel_Left($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "-LEFT->>")
!endfunction

!unquoted function Rel_R($from, $to, $label)
Rel_($from, $to, $label, "-RIGHT->>")
!endfunction
!unquoted function Rel_R($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "-RIGHT->>")
!endfunction
!unquoted function Rel_Right($from, $to, $label)
Rel_($from, $to, $label, "-RIGHT->>")
!endfunction
!unquoted function Rel_Right($from, $to, $label, $techn)
Rel_($from, $to, $label, $techn, "-RIGHT->>")
!endfunction

' Layout Helpers
' ##################################

!unquoted function Lay_D($from, $to)
$from -[hidden]D- $to
!endfunction
!unquoted function Lay_U($from, $to)
$from -[hidden]U- $to
!endfunction
!unquoted function Lay_R($from, $to)
$from -[hidden]R- $to
!endfunction
!unquoted function Lay_L($from, $to)
$from -[hidden]L- $to
!endfunction