package Ġcom . j ace kp ie tras . zoo . domain . inter actor Ċ Ċ import Ġcom . j ace kp ie tras . core . polygon Contains Ċ import Ġcom . j ace kp ie tras . zoo . domain . model . Map Item Entity Ċ import Ġcom . j ace kp ie tras . zoo . domain . model . RegionId Ċ import Ġcom . j ace kp ie tras . zoo . domain . model . Vis ited Road Edge Ċ import Ġcom . j ace kp ie tras . zoo . domain . repository . Map Repository Ċ Ċ class ĠIs Region Seen UseCase ( ĊĠĠĠ Ġprivate Ġval Ġmap Repository : ĠMap Repository , Ċ ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun Ġrun ( region Id : ĠRegion Id ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! map Repository . are Vis ited Ro ads Calculated ()) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġalready Vis ited Ġ= ĠcheckNotNull ( map Repository . get Vis ited Ro ads ()) ĊĠĠĠĠĠĠĠ Ġval Ġregion Ġ= Ġmap Repository . getCurrent Regions (). first Ġ{ Ġit . first . id Ġ== Ġregion Id Ġ}. second ĊĊĠĠĠĠĠĠĠ Ġalready Vis ited . forEach Ġ{ Ġedge Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedge . forEach Path Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . vertices . forEach Ġ{ Ġpoint Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( polygon Contains ( region . vertices , Ġpoint )) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun ĠVis ited Road Edge . forEach Path ( block : Ġ( Map Item Entity . Path Entity ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVis ited Road Edge . Fully Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( to Path ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVis ited Road Edge . Part ially Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Path (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ