```ts
/**
 * Calculates the sums of every complete window in the given list of integers.
 * @param values - A list of integers.
 * @param size - The size of each window.
 * @param hop - The step between the start of each window.
 * @returns An array containing the sums of each complete window.
 * @throws Error if the input is invalid.
 */
export function hopWindowSums(values: number[], size: number, hop: number): number[] {
  if (!Array.isArray(values) || !values.every(Number.isInteger)) {
    throw new Error("Input must be a list of integers.");
  }
  if (!Number.isInteger(size) || size <= 0) {
    throw new Error("Window size must be a positive integer.");
  }
  if (!Number.isInteger(hop) || hop <= 0) {
    throw new Error("Hop step must be a positive integer.");
  }

  const result: number[] = [];
  for (let i = 0; i <= values.length - size; i += hop) {
    const windowSum = values.slice(i, i + size).reduce((acc, num) => acc + num, 0);
    result.push(windowSum);
  }
  return result;
}
```