// 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"
#include "border.h"

using namespace vorosweep;

// handle Event::NEWBORDEREDGESWITCH
void Graph::handle_newborderedgeswitch ( Event *ev )
{
  SweepEdge *se = ev->get_sweepedge();

  double *pos = ev->get_coord();
  double time = ev->get_time();

  se->update_current ( time );
  int gid = ev->get_gid();
  // we do not have (?) to compute a switch event
  // but rather a edge crash in the border
  Border *bo = ev->get_border();
  bo->print();
  Grid1d *bordergrid = bo->get_grid();
  // compute next edge switch event
  Event *next = next_borderedgeswitch ( se, bo, pos, gid );
  dbgprintf ( 5, "--> next switch event add :\n" );
  add_event ( next );
  // add sweepedge to the newly entered cell
  bordergrid->insert_sweepedge ( se, gid );
  se->set_last_gid ( gid );
  // check initial edge crash
  dbgprintf ( 5, "--> edge is starting\n" );
  next_edgecrashes ( se );
  // we then generate potential crash events in border
  BorderBucket *buc = bordergrid->get_bucket ( gid );
  Event *eventlist[MAX_EVENT_LIST];
  int nbe = 0;
  buc->generate_edgecrash_events ( se, get_time(), gid, econtainer, eventlist, nbe );
  if ( nbe )
  {
    // we add the earliest event of se into the priority queue
    Event *earliest = se->get_earliest_event();
    dbgprintf ( 5, "--> earliest event add\n" );
    add_event ( earliest );
  }
  se->set_running();
// 	Event *earliest = se->get_earliest_event();
// 	earliest->print();
}
