"""
Punto de entrada de validación para import de una fila BOM.
"""
from typing import Dict, Any, Optional, Set

from .common import (
    validate_row_required_parent,
    validate_row_required_component,
    validate_row_quantity,
    validate_row_lengths,
    validate_row_optional_numbers,
    validate_row_fks,
)


def validate_row_bom(
    row: Dict[str, Any],
    line_num: int,
    valid_part_numbers: Optional[Set[str]] = None,
) -> Optional[Dict[str, Any]]:
    """
    Valida una fila de CSV de BOMs.
    Encadena: requeridos (padre, componente, cantidad) → longitudes → opcionales numéricos → FKs.
    """
    err = validate_row_required_parent(row, line_num)
    if err:
        return err
    err = validate_row_required_component(row, line_num)
    if err:
        return err
    err = validate_row_quantity(row, line_num)
    if err:
        return err
    err = validate_row_lengths(row, line_num)
    if err:
        return err
    err = validate_row_optional_numbers(row, line_num)
    if err:
        return err
    err = validate_row_fks(row, line_num, valid_part_numbers)
    if err:
        return err
    return None
