from typing import Any


def build_where(**conditions: Any) -> str:
    """
    Build WHERE statement with several `conditions`

    If no `conditions` passed return `WHERE 1 = 1`
    In case if a value has primitive type it will be an equal condition and
    in case if it is an iterable it will be an include condition
    """
    if not conditions:
        return "WHERE 1 = 1"
    where_str = "WHERE "
    for i, (column, value) in enumerate(conditions.items()):
        if i > 0:
            where_str += " AND "
        if value is None:
            where_str += f"{column} IS NULL"
        else:
            if isinstance(value, (int, float)):
                where_str += f"{column} = {value}"
            elif isinstance(value, (list, tuple)):
                in_str = ", ".join([f"'{v}'" if isinstance(v, str) else str(v) for v in value])
                where_str += f"{column} IN ({in_str})"
            else:
                where_str += f"{column} = '{value}'"
    return where_str