#include <stdio.h>
#include <string.h>

#define RACES 10

// race results
struct raceResult
{
    int raceNumber; // The unique Race Number
    int winningHorseNumber; // 1st place horse number for the race
    int placeHorseNumber; // 2nd place horse number for the race
    int showHorseNumber; // 3rd place horse number for the race
};

// assume you can access this array that contains the results
struct raceResult theDailyResults[RACES] =
{
    {1, 5, 3, 7},
    {2, 2, 8, 1},
    {3, 4, 6, 9},
    {4, 10, 2, 3},
    {5, 7, 5, 4},
    {6, 1, 3, 2},
    {7, 6, 9, 8},
    {8, 8, 7, 5},
    {9, 3, 4, 6},
    {10, 2, 1, 9}
};

// your specific race wager
struct raceWager
{
    int raceNumber; // the race number where you bet your horse
    int myHorseNumber; // the horse you bet on
    float myBetAmount; // how much money you are betting
    char betType; // W for "Win", P for "Place", or S for "Show"
};

// function prototype
float myHorseBet (struct raceWager myBet, struct raceResult theDailyResults[]);

// **************************************************
// Function: myHorseBet
//
// Description: calculates winnings for a horse race bet
//
// Parameters: myBet - structure containing wager info
//             theDailyResults[] - array of race results
//
// Returns: winnings in dollars
//          returns 0 if bet is invalid or lost
//
// **************************************************

float myHorseBet (struct raceWager myBet, struct raceResult theDailyResults[])
{
    int raceIndex;
    float winnings = 0;

    // validate race number
    if(myBet.raceNumber < 1 || myBet.raceNumber > RACES)
    {
        return 0;
	}//if
	
    // validate horse number
    if(myBet.myHorseNumber < 1 || myBet.myHorseNumber > 20)
    {
        return 0;
	}//if
	
    // validate bet amount
    if(myBet.myBetAmount < 5 || myBet.myBetAmount > 1000)
    {
        return 0;
    }//if
    
    raceIndex = myBet.raceNumber - 1;

    // Calculate winnings if bet type is Win
    if(tolower(myBet.betType) == 'w')
    {
        if(myBet.myHorseNumber == theDailyResults[raceIndex].winningHorseNumber)
        {
            winnings = myBet.myBetAmount * 10;
        }//if
    }//if

    // Calculate winnings if bet type is Place
    else if(tolower(myBet.betType) == 'p')
    {
        if(myBet.myHorseNumber == theDailyResults[raceIndex].winningHorseNumber ||
           myBet.myHorseNumber == theDailyResults[raceIndex].placeHorseNumber)
           {
            	winnings = myBet.myBetAmount * 5;
           }//if
    }//else if

    // Calculate winnings if bet type is Show
    else if(tolower(myBet.betType) == 's')
    {
        if(myBet.myHorseNumber == theDailyResults[raceIndex].winningHorseNumber ||
           myBet.myHorseNumber == theDailyResults[raceIndex].placeHorseNumber ||
           myBet.myHorseNumber == theDailyResults[raceIndex].showHorseNumber)
           {
            	winnings = myBet.myBetAmount * 3;
           }//if
    }//else if

    else
    {
        return 0;
    }//else

    return winnings;
}//myHorseBet

// **************************************************
// Function: main
//
// Description: collects user input and displays winnings
//
// **************************************************

int main()
{
    struct raceWager myBet;
    float winnings;

    // input
    printf("Enter race number (1-10): ");
    scanf("%d", &myBet.raceNumber);

    printf("Enter horse number (1-20): ");
    scanf("%d", &myBet.myHorseNumber);

    printf("Enter bet amount ($5 - $1000): ");
    scanf("%f", &myBet.myBetAmount);

    printf("Enter bet type (W/P/S): ");
    scanf(" %c", &myBet.betType);

    // call function
    winnings = myHorseBet(myBet, theDailyResults);

    // output
    if(winnings > 0)
        printf("\nYou won $%.2f!\n", winnings);
    else
        printf("\nYou lost or entered invalid bet.\n");

    return 0;
}
