from diagrams import Diagram, Edge
from diagrams.aws.compute import Lambda
from diagrams.aws.database import Dynamodb
from diagrams.aws.network import CloudFront
from diagrams.aws.security import Cognito
from diagrams.azure.identity import AzureActiveDirectory
from diagrams.onprem.client import Users

graph_attr = {
    "bgcolor": "transparent",
    "pad": "0.25",
    "rankdir": "LR",
    "splines": "ortho",
    "nodesep": "0.55",
    "ranksep": "0.85",
    "fontname": "Inter",
    "fontsize": "22",
}

node_attr = {
    "fontname": "Inter",
    "fontsize": "12",
}

edge_attr = {
    "fontname": "Inter",
    "fontsize": "10",
    "color": "#4A5568",
    "arrowsize": "0.75",
}

with Diagram(
    "Python diagrams · Clean Spine",
    filename="/opt/diagram-tools-lab/site/assets/python-diagrams-spine",
    direction="LR",
    curvestyle="ortho",
    outformat=["png", "svg"],
    show=False,
    graph_attr=graph_attr,
    node_attr=node_attr,
    edge_attr=edge_attr,
):
    user = Users("Mitarbeiter\nBrowser")
    web = CloudFront("Web-Tools\nCloudFront + S3")
    cognito = Cognito("Cognito\nBroker / SP")
    trigger = Lambda("Pre-Token\nLambda")
    table = Dynamodb("DynamoDB\nApp Access")
    entra = AzureActiveDirectory("Entra ID\nSAML IdP + MFA")

    user >> Edge(label="1 HTTPS") >> web
    web >> Edge(label="2 PKCE") >> cognito
    cognito >> Edge(label="6 trigger") >> trigger
    trigger >> Edge(label="7 groups") >> table
    cognito >> Edge(label="3 SAML request", color="#0F6CBD", penwidth="2", constraint="false") >> entra
    entra >> Edge(label="5 SAML assertion", color="#0F6CBD", penwidth="2", constraint="false") >> cognito
    cognito >> Edge(label="8 JWT", color="#1F7A52", penwidth="2", constraint="false") >> web
