from src.interfaces import IStringCalculator
import re


class StringCalculator(IStringCalculator):
    def add(self, numbers: str) -> int:
        if not numbers:
            return 0

        if numbers.startswith("//"):
            if "\n" not in numbers:
                raise ValueError("Ungültiges Format: Nicht vollständig")
            delimiter_end_index = numbers.index("\n")
            delimiter = numbers[2:delimiter_end_index]
            numbers = numbers[delimiter_end_index + 1:]
            numbers = numbers.replace(delimiter, ",")

        numbers = numbers.replace("\n", ",")

        # Split the string by commas, convert each value to an integer, and sum them up
        try:
            numbers_list = list(map(int, numbers.split(",")))
        except ValueError:
            raise ValueError("Ungültiges Zahlenformat: Enthält nicht-numerische Werte")

        negative_numbers = [num for num in numbers_list if num < 0]
        if negative_numbers:
            raise ValueError(f"Negative nicht erlaubt: {negative_numbers}")

        numbers_list = [num for num in numbers_list if num <= 1000]

        return sum(numbers_list)