#ifdef TEST

#include "unity.h"
#include "../src/withdrawMoney.c"
#include "../src/updateCustomerAccountBalance.c"
#include "../src/currentCustomerAccountBalance.c"

void setUp(void)
{
}

void tearDown(void)
{
}

void test_initiateWithdraw(void) {

    /* Arrange */

    int length                      = 10;

    float amountToWithdraw[]        = {200.5, 340, 244.5, 340, 1200, 3232, 1123, 460.5, 900, 1005};
    float availableAccountBalance[] = {2000, 3400, 2445, 3400, 6000, 5000, 1000, 2000, 2000, 9000};

    float expectedValue[length];
    float result[length];

    /* Act */

    for (int i = 0; i < length; i++) {
        result[i] = initiateWithdraw( amountToWithdraw[i], availableAccountBalance[i] );
    }

    /* Assert */

    for (int i = 0; i < length; i++) {
        expectedValue[i] = ( availableAccountBalance[i] - amountToWithdraw[i] );
    }

    for (int i = 0; i < length; i++) {
        TEST_ASSERT_EQUAL_FLOAT(expectedValue[i],result[i]);
    }
    
}

void test_withdrawSpecificAmountSuccess(void) {

   /* Arrange */

   int user_id[3]   = {1234, 1235, 1236}; // user_ids from file for testing

   bool result[3];

   /* Act */
   
   for (int i = 0; i < 3; i++) {
        result[i] = withdrawSpecificAmount(user_id[i], 50);
    }   

    /* Assert */
    
    for (int i = 0; i < 3; i++) {
        TEST_ASSERT_TRUE(result[i]);     // Pass if withdrawal is successful
    }
   
}

void test_withdrawSpecificAmountFailure(void) {

   /* Arrange */

   int user_id[3]   = {12934, 13027, 16606}; // Random wrong user_ids

   bool result[3];

   /* Act */
   
   for (int i = 0; i < 3; i++) {
        result[i] = withdrawSpecificAmount(user_id[i], 50);
    }   

    /* Assert */
    
    for (int i = 0; i < 3; i++) {
        TEST_ASSERT_FALSE(result[i]);     // Pass if withdrawal fails and function returns false
    }
   
}




#endif // TEST