import schemdraw
import schemdraw.flow as flow
from schemdraw.util import Point
from schemdraw.elements import Line

fc = schemdraw.Drawing()
fc.config(font='Times New Roman', fontsize = (global_fontsize := 18))

#1
width, height, arrow_length = (5.0,1.5,1.0)

#2
fc += (start := flow.Start(w=width, h=height, label="Start"))
fc += (arrow1 := flow.Arrow().down(length=arrow_length))

#3
slant=0.5
fc += (read_n := flow.Data(w=width, h=height, s=slant, label='Read n'))

#4
fc.here = Point((fc.here.x + slant, fc.here.y))

#5
fc += (arrow2 := flow.Arrow().down(length=arrow_length))
fc += (intialize := flow.Box(w=width, h=height, label="i=1, result=i"))
fc += (arrow3 := flow.Arrow().down(length=arrow_length))

#6
fc += (decision := flow.Decision(w=width, h=height, E='No', S='Yes', 
                                 fontsize = global_fontsize,
                                 label='i \u2264 n'))
fc += (arrow4 := flow.Arrow().down(length=arrow_length))

#7
fc += (iterate := flow.Box(w=width, h=height, 
                           label="result=result\u00D7i"))

#8
fc += (arrow5 := flow.Arrow().at(decision.E).right(length=arrow_length))
fc += (end := flow.Start(w=width, h=height, anchor='W', 
                         label="Print result"))

#9
fc += (arrow6 := flow.Arrow().at(iterate.W).left(length=arrow_length))
fc += (increment := flow.Box(w=width, h=height, label="i=i+1"))

#10
fc += (connector := Line().at(increment.N).up(length=
                                              arrow_length+height/2))
fc += (arrow7 := flow.Arrow().to(decision.W))

fc.save(fname='charts/flowchart-factorial.png', dpi=300)