import csv
import io
import re
from decimal import Decimal
from lfx.custom.custom_component.component import Component
from lfx.io import MessageTextInput, Output
from lfx.schema import Data

class CsvNormalizer(Component):
    display_name = "CSV Normalizer Lab"
    description = "Keep every SKU row and flag invalid amounts."
    inputs = [MessageTextInput(name="csv_text", display_name="CSV text")]
    outputs = [Output(display_name="Data", name="data", method="build_data")]

    def build_data(self) -> Data:
        rows = []
        for item in csv.DictReader(io.StringIO(self.csv_text)):
            raw = item.get("amount", "")
            valid = re.fullmatch(r"[0-9]+\.[0-9]{2}", raw) is not None
            rows.append({"sku": item.get("sku", "").strip(),
                         "cents": int(Decimal(raw) * 100) if valid else None,
                         "status": "ok" if valid else "review_amount"})
        return Data(data={"rows": rows})
