/*
 * This file is part of the Owl Positioning System (OwlPS) project.
 * It is subject to the copyright notice and license terms in the
 * COPYRIGHT.t2t file found in the top-level directory of this
 * distribution and at
 *   https://code.lm7.fr/mcy/owlps/src/master/COPYRIGHT.t2t
 * No part of the OwlPS Project, including this file, may be copied,
 * modified, propagated, or distributed except according to the terms
 * contained in the COPYRIGHT.t2t file; the COPYRIGHT.t2t file must be
 * distributed along with this file, either separately or by replacing
 * this notice by the COPYRIGHT.t2t file's contents.
 */


#include "mobile.hh"
#include "request.hh"



/* *** Constructors *** */


Mobile::Mobile(const Mobile &m):
  WifiDevice(m), last_results(m.last_results)
{
  update_last_request() ;
}


Mobile::~Mobile()
{
  if (last_request)
    delete last_request ;
}



/* *** Write accessors *** */


void Mobile::update_last_request()
{
  if (last_results.empty())
    {
      delete last_request ;
      last_request = nullptr ;
      return ;
    }

  if (! last_request)
    last_request = new Request(*last_results.get_request()) ;
  else
    *last_request = *last_results.get_request() ;

  last_results.set_request(last_request) ;
}



/* *** Operators *** */


Mobile& Mobile::operator=(const Mobile &m)
{
  if (this == &m)
    return *this ;

  this->WifiDevice::operator=(m) ;

  return *this ;
}


bool Mobile::operator==(const Mobile &m) const
{
  if (this == &m)
    return true ;

  return
    this->WifiDevice::operator==(m) ;
}



std::ostream &operator<<(std::ostream &os, const Mobile &m)
{
  os << static_cast<WifiDevice>(m) ;

  return os ;
}
