#ifndef __FILE_BETS_H_SEEN__
#define __FILE_BETS_H_SEEN__

/*-----------------------------------------------------------------------------

Copyright (C) 2012

A. Ronald Gallant
Post Office Box 659
Chapel Hill NC 27514
USA

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

-----------------------------------------------------------------------------*/

#include "craps.h"

namespace craps {

  class pass_line_bet : public bet_base {
  private:
    std::string name;
    INTEGER player;
    INTEGER bet;
    INTEGER odds;
  public :
    pass_line_bet(INTEGER p, INTEGER b)
      : name("pass_line_bet"), player(p), bet(b), odds(0) { }
    payoff_t house_action
      (roll_t roll, marker_t marker, bool& remove_bet);
    payoff_t player_action 
      (roll_t roll, marker_t marker, INTEGER change_odds);
    std::string get_name() const {return name;}
    INTEGER get_bet() const {return bet;}
    INTEGER get_odds() const {return odds;}
    INTEGER get_wager() const {return bet + odds;}
  };

  class come_bet : public bet_base {
  private:
    std::string name;
    INTEGER player;
    INTEGER bet;
    INTEGER odds;
    INTEGER point;
  public :
    come_bet(INTEGER p, INTEGER b)
      : name("come_bet"), player(p), bet(b), odds(0), point(0) { }
    payoff_t house_action
      (roll_t roll, marker_t marker, bool& remove_bet);
    payoff_t player_action 
      (roll_t roll, marker_t marker, INTEGER change_odds);
    std::string get_name() const {return name;}
    INTEGER get_bet() const {return bet;}
    INTEGER get_odds() const {return odds;}
    INTEGER get_wager() const {return bet + odds;}
    INTEGER get_point() const {return point;}
  };

  class any_craps_bet : public bet_base {
  private:
    std::string name;
    INTEGER player;
    INTEGER bet;
  public :
    any_craps_bet(INTEGER p, INTEGER b)
      : name("any_craps_bet"), player(p), bet(b) { }
    payoff_t house_action
      (roll_t roll, marker_t marker, bool& remove_bet);
    std::string get_name() const {return name;}
    INTEGER get_bet() const {return bet;}
    INTEGER get_wager() const {return bet;}
  };

}

#endif

