/* outcom.c       print outcome of hand(s)
 */

#include "local.h"
#include "bj.h"
#include "hndmgr.h"

static CASH value = {0};

/* outcom      - print outcome of hand and compute results
 */
CASH outcom(bet, tophand, isinsur, isdbl)
   CASH  bet;           /* amount of player's bet */
   short tophand;       /* how many player hands */
   bool  isinsur;       /* player took insurance? */
   bool  isdbl;         /* is player DBLDN? */
{
   void  prmsg();
   bool  isbj();
   short score();

   short h;             /* which hand */

   value = 0;
   if (isinsur && isbj(DEALER))
      prmsg(1, 1, "Insurance wins\n", ((bet) / (isdbl ? 4 : 2)));
   else if (isinsur)
      prmsg(1, 1, "Insurance loses\n", ((-bet) / (isdbl ? 4 : 2)));
   if (isbj(DEALER) && !isbj(1))
      prmsg(1, 1, "Dealer BJ beats all but BJ", ((-bet) / (isdbl ? 2 : 1)));
   else if (isbj(DEALER) && isbj(1))
      prmsg(1, 1, "Both BJ: push", (CASH)0);
   else if (isbj(1))
      prmsg(1, 1, "Your BJ wins 3 for 2", ((3 * bet) / 2));
   else {
      for (h = 1; h <= tophand; ++h) {
         if (21 < score(h))
            value -= bet;        /* "Bust" message already printed */
         else if (score(DEALER) == score(h))
            prmsg(h, tophand, "Push", (CASH)0);
         else if (score(DEALER) < score(h) || 21 < score(DEALER))
            prmsg(h, tophand, "Win", bet);
         else
            prmsg(h, tophand, "Lose", -bet);
      }
   }
   return (value);
}

/* prmsg    - prints appropriate message
 */
static void prmsg(h, tophand, s, delta)
   short h;       /* which hand */
   short tophand; /* how many hands */
   char s[];      /* message */
   CASH delta;    /* change of value ( + | - ) */
{
   if (tophand == 2)
      printf("On hand %d, ", h);
   printf("%s\n", s);
   value += delta;
}

