Error when calling Execute function in Universal Router

Well, conceptually, you should not input usdcAmount from the outside, but rather, calculate that amount internally in your function, by calling the pool contract's getAmountsOut function.

For example:

uint256[] memory amounts = IUniswapV2Router02(POOL).getAmountsOut(daiAmount, [DAI, USDC]);
assert(daiAmount == amounts[0]);
uint256 usdcAmount = amounts[1];

Or simply:

uint256 usdcAmount = IUniswapV2Router02(POOL).getAmountsOut(daiAmount, [DAI, USDC])[1];

So you need to import the IUniswapV2Router02 interface, and hard-code the address of that pool contract just as you do with the other hard-coded addresses.