```python
def parse_duration(text: str) -> int:
    if not isinstance(text, str):
        raise ValueError("Input must be a string")
    if not text:
        raise ValueError("Empty string is not allowed")

    units = {"d": 86400, "h": 3600, "m": 60, "s": 1}
    seen_units = set()
    total_seconds = 0

    for part in text.split():
        if len(part) < 2:
            raise ValueError("Missing value or unknown unit")
        value = part[:-1]
        unit = part[-1]

        if not value.isdigit() or int(value) < 0:
            raise ValueError("Invalid value")

        if unit not in units:
            raise ValueError("Unknown unit")

        if unit in seen_units:
            raise ValueError("Repeated unit")

        if seen_units and units[unit] > units[seen_units[-1]]:
            raise ValueError("Units out of order")

        total_seconds += int(value) * units[unit]
        seen_units.add(unit)

    return total_seconds
```