package com.liangdp.graphviz4s.examples

import com.liangdp.graphviz4s.Graph
import scala.collection.mutable.Map

/**
 * corresponding to the python example:
 * https://github.com/xflr6/graphviz/blob/master/examples/er.py
 * @author Depeng Liang
 */
object Er {
  def main(args: Array[String]): Unit = {
    val e = new Graph("ER")

    e.attr("node", Map("shape" -> "box"))
    e.node("course")
    e.node("institute")
    e.node("student")

    e.attr("node", Map("shape" -> "ellipse"))
    e.node("name0", attrs = Map("label" -> "name"))
    e.node("name1", attrs = Map("label" -> "name"))
    e.node("name2", attrs = Map("label" -> "name"))
    e.node("code")
    e.node("grade")
    e.node("number")

    e.attr("node", attrs = Map("shape" -> "diamond",
        "style" -> "filled", "color" -> "lightgrey"))
    e.node("C-I")
    e.node("S-C")
    e.node("S-I")

    e.edge("name0", "course")
    e.edge("code", "course")
    e.edge("course", """"C-I"""", label = "n", attrs = Map("len" -> "1.00"))
    e.edge(""""C-I"""", "institute", label = "1", attrs = Map("len" -> "1.00"))
    e.edge("institute", "name1")
    e.edge("institute", """"S-I"""", label = "1", attrs = Map("len" -> "1.00"))
    e.edge(""""S-I"""", "student", label = "n", attrs = Map("len" -> "1.00"))
    e.edge("student", "grade")
    e.edge("student", "name2")
    e.edge("student", "number")
    e.edge("student", """"S-C"""", label = "m", attrs = Map("len" -> "1.00"))
    e.edge(""""S-C"""", "course", label = "n", attrs = Map("len" -> "1.00"))

    e.body += """label = "\n\nEntity Relation Diagram\ndrawn by NEATO""""
    e.body += "fontsize=20"

    e.view(engine = "neato", fileName = "er.gv", directory = ".")
  }
}