IEnumerator ProcessingTask(Product product, int amountOfProcesses)
    {
        switch (product.processingState)
        {
        case Product.ProcessingState.CUPPING:
            processTimeLeft = product.productData.cuppingTime * amountOfProcesses;
            break;

        case Product.ProcessingState.WRAPPING:
            processTimeLeft = product.productData.wrappingTime * amountOfProcesses;
            break;

        case Product.ProcessingState.PRICING:
            processTimeLeft = product.productData.pricingTime * amountOfProcesses;
            break;

        default:
            processTimeLeft = 3f;
            break;
        }

        processingTime = processTimeLeft;

        taskTimer.gameObject.SetActive(true);
        taskTimer.ChangePosition(product);

        while (processTimeLeft > 0f)
        {
            yield return(new WaitForSeconds(1f));

            processTimeLeft--;
            taskTimer.timerSprite.fillAmount = processTimeLeft / processingTime;
            taskTimer.timerText.SetText(processTimeLeft.ToString());
        }



        if (product.processingState == Product.ProcessingState.PRICING)
        {
            StopCoroutine(ProcessingTask(product, amountOfProcesses));
            currentlyProcessing = false;
            taskTimer.gameObject.SetActive(false);
            Debug.Log("Finished processing product.");
            CalculatePrice(product);
        }
        else
        {
            product.NextState();
            taskTimer.ChangePosition(product);
            StartCoroutine(ProcessingTask(product, amountOfProcesses));
        }

        yield return(null);
    }