from collections import Counter
from decimal import Decimal, InvalidOperation

ALLOWED = {"HOME_DRINKWARE", "APPAREL_TOPS", "ACCESSORIES_BAGS"}

def main(input):
    counts = Counter(row["sku"] for row in input)
    output = []
    for row in input:
        reasons = []
        if not row["sku"].strip():
            reasons.append("missing_sku")
        elif counts[row["sku"]] > 1:
            reasons.append("duplicate_sku")
        if not row["title"].strip():
            reasons.append("missing_title")
        if row["category_code"] not in ALLOWED:
            reasons.append("invalid_category")
        try:
            price = Decimal(str(row["price"]))
            if not price.is_finite() or price <= 0:
                reasons.append("invalid_price")
        except InvalidOperation:
            reasons.append("invalid_price")
        output.append(dict(row, validation_errors=", ".join(reasons), publishable=not reasons))
    return output
