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

#define RACES 10

// race results
struct raceResult
{
    int raceNumber;
    int winningHorseNumber;
    int placeHorseNumber;
    int showHorseNumber;
};

// 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;
    int myHorseNumber;
    float myBetAmount;
    char betType;
};

// 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;

    // validate horse number
    if(myBet.myHorseNumber < 1 || myBet.myHorseNumber > 20)
        return 0;

    // validate bet amount
    if(myBet.myBetAmount < 5 || myBet.myBetAmount > 1000)
        return 0;

    raceIndex = myBet.raceNumber - 1;

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

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

    // 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;
    }

    else
        return 0;

    return winnings;
}

// **************************************************
// 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;
}