#include "Strategie_prise_cerises.h"
#include "Commande_vitesse.h"
#include "Geometrie.h"
#include "Geometrie_robot.h"
#include "math.h"

// Rotation en rad/s pour accoster les cerises
#define ROTATION_CERISE 0.5f

double vitesse_accostage_mm_s=100;

enum etat_action_t cerise_accostage(void){
    enum etat_action_t etat_action = ACTION_EN_COURS;
    struct position_t contacteur_gauche, contacteur_droit;
    double rotation;

    static enum {
        CERISE_AVANCE_DROIT,
        CERISE_TOURNE_CONTACTEUR_GAUCHE,
        CERISE_TOURNE_CONTACTEUR_DROIT,
        CERISE_ACCOSTE
    } etat_accostage=CERISE_AVANCE_DROIT;


    // Position des contacteurs 
    contacteur_gauche.x_mm = RAYON_ROBOT;
    contacteur_gauche.y_mm = 0;

    contacteur_droit.x_mm = RAYON_ROBOT * cos(-M_PI/6);
    contacteur_droit.y_mm = RAYON_ROBOT * sin(-M_PI/6);

    switch (etat_accostage)
    {
    case CERISE_AVANCE_DROIT:
        commande_vitesse(vitesse_accostage_mm_s * cos(-M_PI/6), vitesse_accostage_mm_s * sin(-M_PI/6), 0);
        break;
    
    case CERISE_TOURNE_CONTACTEUR_GAUCHE:
        rotation = ROTATION_CERISE;
        commande_rotation(ROTATION_CERISE, contacteur_gauche.x_mm, contacteur_gauche.y_mm);
        break;
    
    case CERISE_TOURNE_CONTACTEUR_DROIT:
        rotation = ROTATION_CERISE;
        commande_rotation(-ROTATION_CERISE, contacteur_droit.x_mm, contacteur_droit.y_mm);
        break;
    
    default:
        break;
    }

    return etat_action;
}

