@startuml
!include https://raw.githubusercontent.com/Intelliware/iwd-plantuml-styles/master/iwd_colours.puml
!include <tupadr3/common>
!include <tupadr3/font-awesome/user>

skinparam defaultTextAlignment center
skinparam wrapWidth 200

skinparam Arrow {
    Color $IWD_DARK_BLUE
    FontColor $IWD_DARK_BLUE
    FontSize 12
}

skinparam rectangle<<light>> {
    FontColor $IWD_LIGHT_GREY
    BackgroundColor transparent
    BorderColor $IWD_LIGHT_GREY
    shadowing false
}

skinparam rectangle<<no_border>> {
    FontColor black
    BackgroundColor #ffffff00
    BorderColor transparent
    shadowing false
}

skinparam node<<external>> {
    FontColor black
    BackgroundColor $IWD_SAND
    BorderColor $IWD_DARK_GREY
}

skinparam database<<iwd>> {
    FontColor white
    BackgroundColor $IWD_LIGHT_BLUE
    BorderColor black
}

skinparam artifact<<iwd>> {
    FontColor white
    BackgroundColor $IWD_LIGHT_BLUE
    BorderColor black
}

!function $formatShapeSprite($sprite)

    !if (%substr($sprite, 0, 5) == "data:") 
        !return "\n<img:" + $sprite + ">"
    !elseif (%substr($sprite, 0, 1) == "<") 
    !return "\n" + $sprite
    !else
        !return "\n<" + $sprite + ">"
    !endif

!endfunction

!function $formatShapeTechnology($technology, size = 12)
    !if ($technology != "")
        !return '\n<size:' + size + '>[' + $technology + ']</size>'
    !else
        !return ""
    !endif
!endfunction

!function $formatShapeStereotype($stereotype)
    !if ($stereotype != "")
        !return "//<size:12><<" + $stereotype + ">></size>//\n"
    !else
        !return ""
    !endif
!endfunction

!function $formatShapeContents($name, $stereotype, $technology, $sprite, $description)
    !if ($sprite == "") && ($description == "")
        !return $formatShapeStereotype($stereotype) + "==" + $name + $formatShapeTechnology($technology);
    !elseif ($sprite != "") && ($description == "")
        !return $formatShapeStereotype($stereotype) + "==" + $name + $formatShapeTechnology($technology) + $formatShapeSprite($sprite)
    !elseif ($sprite == "") && ($description != "")
        !return $formatShapeStereotype($stereotype) + "==" + $name + $formatShapeTechnology($technology) + "\n\n<size:12>" + $description + "</size>"
    !else
        !return $formatShapeStereotype($stereotype) + "==" + $name + $formatShapeTechnology($technology) + $formatShapeSprite($sprite) + "\n<size:12>" + $description + "</size>"
    !endif 
!endfunction

!unquoted procedure IwdArrow($from, $to, $label, $techn="", $direction="")
$from -$direction->> $to : "**$label** $formatShapeTechnology($techn, 10)"
!endprocedure

!define IWD_SHAPE($shape_type,$shape_name,$shape_short_name,$shape_technology,shape_sprite,shape_description,shape_stereotype,shape_style) $shape_type "$formatShapeContents($shape_name, shape_stereotype, $shape_technology, shape_sprite, shape_description)" as $shape_short_name <<shape_style>>

!unquoted procedure IwdUser($name, $shortName, $description) 
IWD_SHAPE("rectangle", $name, $shortName, "", $user, $description, "User", "no_border")
!endprocedure

!define IWD_ARTIFACT(_name, _shortName, _technology, $sprite, _description, _artifactType) IWD_SHAPE("artifact", _name, _shortName, _technology, $sprite, _description, _artifactType, "iwd")

!unquoted procedure  IwdIconOnly($name, $shortName, $sprite, $description = "", $stereotype = "") 
IWD_SHAPE("rectangle", $name, $shortName, "", $sprite, $description, $stereotype, "no_border")
!endprocedure

!unquoted procedure IwdDatabase(_name, _shortName, _technology, $sprite, _description) 
IWD_SHAPE("database", _name, _shortName, _technology, $sprite, _description, "Database", "iwd")
!endprocedure

!define IWD_EXT_NODE(_name, _shortName, _technology, $sprite, _description) IWD_SHAPE("node", _name, _shortName, _technology, $sprite, _description, "External System", "external")

@enduml
