// Vorosweep - Copyright (C) 2010-2014 T. Mouton
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to <thibaud.mouton@gmail.com>.

#include "vorosweep.h"

using namespace vorosweep;

void Graph::handle_newedgeswitch ( Event *ev )
{
  SweepEdge *se = ev->get_sweepedge();

  double *pos = ev->get_coord();
  double time = ev->get_time();
  
//   dbgprintf(2, "sweepfacet 0 --> %p\n", se->get_front(0)->get_owner());
//   dbgprintf(2, "sweepfacet 1 --> %p\n", se->get_front(1)->get_owner());
  
  se->get_front(0)->get_owner()->print();
  se->get_front(1)->get_owner()->print();

  se->update_current ( time );
  int gid = ev->get_gid();
  se->set_last_gid ( gid );
  // compute next edge switch event
  if ( fabs ( se->get_dir3d()[2] ) >= Graph::epsilon )
  {
    Event *next = next_edgeswitch ( se, pos, gid );
    se->set_next_switch( next->get_time() );
    dbgprintf ( 5, "--> next switch event add :\n" );
    add_event ( next );    
  }
  // add sweepedge to the newly entered cell
  bucketgrid->insert_sweepedge ( se, gid );
  se->set_last_gid ( gid );
  // check initial edge crash
  dbgprintf ( 5, "--> edge is starting\n" );
  next_edgecrashes ( se );
  // set the edge running
  se->set_running();
  // check for potential crash events in cell gid
  process_edge_events ( se, time, gid );
}