#ifndef __Adapter_HXX__
#define __Adapter_HXX__


#include "Helico.hxx"
#include "Vehicule.hxx"

class AdapterMulti : public Vehicule, public Helico
{
private:

  int conversionAccelVersAngle(int accel)
    {
      return accel;
    }

public:
  AdapterMulti() : 
    Vehicule(),
    Helico()
    {
    }

  void demarrer()
    {
      lancerTurbine();
      monter(100);
      cout << "Demarrage Helico Adapte Multi" << endl;
    }

  void arreter()
    {
      descendre(altitude_); // ici l'on utilise directement l'attribut altitude_
      arreterTurbine();
      cout << "Arret Helico Adapte Multi" << endl;
    }

  void accelerer(int increment)
    {
      modifierAngle(conversionAccelVersAngle(increment));
    }
};

class AdapterAgreg : public Vehicule
{
private:
  Helico *h;

  int conversionAccelVersAngle(int accel)
    {
      return accel;
    }

public:
  AdapterAgreg(const Helico &zozo) : 
    Vehicule(),
    h(const_cast<Helico *>(&zozo))
    {
    }

  void demarrer()
    {
      h->lancerTurbine();
      h->monter(100);
      cout << "Demarrage Helico Adapte Aggreg" << endl;
    }

  void arreter()
    {
      h->descendre(h->altitude()); // obligation d'utiliser la methode altitude()
      h->arreterTurbine();
      cout << "Arret Helico Adapte Aggreg" << endl;
    }

  void accelerer(int increment)
    {
      h->modifierAngle(conversionAccelVersAngle(increment));
    }
};

#endif

