!include https://raw.githubusercontent.com/stawirej/C4-PlantUML/master/C4_Context.puml
' uncomment the following line and comment the first to use locally
' !include C4_Context.puml

' Scope: A single software system.
' Primary elements: Containers within the software system in scope.
' Supporting elements: People and software systems directly connected to the containers.
' Intended audience: Technical people inside and outside of the software development team; including software architects, developers and operations/support staff.

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

!procedure CONTAINER_BG_COLOR()
#438DD5
!endprocedure

!procedure EXTERNAL_CONTAINER_BG_COLOR()
#AAAAAA
!endprocedure

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

skinparam rectangle<<container>> {
    StereotypeFontColor ELEMENT_FONT_COLOR()
    FontColor ELEMENT_FONT_COLOR()
    BackgroundColor CONTAINER_BG_COLOR()
    BorderColor #3C7FC0
}

skinparam database<<container>> {
    StereotypeFontColor ELEMENT_FONT_COLOR()
    FontColor ELEMENT_FONT_COLOR()
    BackgroundColor CONTAINER_BG_COLOR()
    BorderColor #3C7FC0
}

skinparam rectangle<<external_container>> {
    StereotypeFontColor ELEMENT_FONT_COLOR()
    FontColor ELEMENT_FONT_COLOR()
    BackgroundColor EXTERNAL_CONTAINER_BG_COLOR()
    BorderColor #8A8A8A
}

skinparam database<<external_container>> {
    StereotypeFontColor ELEMENT_FONT_COLOR()
    FontColor ELEMENT_FONT_COLOR()
    BackgroundColor EXTERNAL_CONTAINER_BG_COLOR()
    BorderColor #8A8A8A
}

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

!procedure LAYOUT_WITH_LEGEND()
    hide stereotype
    legend right
        |=                               |= Type              |
        |<PERSON_BG_COLOR()>             | person             |
        |<EXTERNAL_PERSON_BG_COLOR()>    | external person    |
        |<SYSTEM_BG_COLOR()>             | system             |
        |<EXTERNAL_SYSTEM_BG_COLOR()>    | external system    |
        |<CONTAINER_BG_COLOR()>          | container          |
        |<EXTERNAL_CONTAINER_BG_COLOR()> | external container |
    endlegend
!endprocedure

' Elements
' ##################################

!unquoted procedure Container(e_alias, e_label, e_techn)
    rectangle "==e_label\n//<size:$TECHN_FONT_SIZE>[e_techn]</size>//" <<container>> as e_alias
!endprocedure

!unquoted procedure Container(e_alias, e_label, e_techn, e_descr)
    rectangle "==e_label\n//<size:$TECHN_FONT_SIZE>[e_techn]</size>//\n\n e_descr" <<container>> as e_alias
!endprocedure

!unquoted procedure ContainerDb(e_alias, e_label, e_techn)
    database "==e_label\n//<size:$TECHN_FONT_SIZE>[e_techn]</size>//" <<container>> as e_alias
!endprocedure

!unquoted procedure ContainerDb(e_alias, e_label, e_techn, e_descr)
    database "==e_label\n//<size:$TECHN_FONT_SIZE>[e_techn]</size>//\n\n e_descr" <<container>> as e_alias
!endprocedure

!unquoted procedure Container_Ext(e_alias, e_label, e_techn)
    rectangle "==e_label\n//<size:$TECHN_FONT_SIZE>[e_techn]</size>//" <<external_container>> as e_alias
!endprocedure

!unquoted procedure Container_Ext(e_alias, e_label, e_techn, e_descr)
    rectangle "==e_label\n//<size:$TECHN_FONT_SIZE>[e_techn]</size>//\n\n e_descr" <<external_container>> as e_alias
!endprocedure

!unquoted procedure ContainerDb_Ext(e_alias, e_label, e_techn)
    database "==e_label\n//<size:$TECHN_FONT_SIZE>[e_techn]</size>//" <<external_container>> as e_alias
!endprocedure

!unquoted procedure ContainerDb_Ext(e_alias, e_label, e_techn, e_descr)
    database "==e_label\n//<size:$TECHN_FONT_SIZE>[e_techn]</size>//\n\n e_descr" <<external_container>> as e_alias
!endprocedure


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

!unquoted procedure Container_Boundary(e_alias, e_label)
    Boundary(e_alias, e_label, "Container")
!endprocedure

