package invoice.after;

import java.util.ArrayList;
import java.util.List;

/** Una factura: sus líneas y las reglas para calcular el total. Nada de texto. */
public class Invoice {

    /** Una línea: cantidad y precio unitario en céntimos. */
    public record Line(String description, int quantity, int unitPrice) {
        public int amount() {
            return quantity * unitPrice;
        }
    }

    private static final int TAX_PERCENT = 18;   // IGV

    private final String customer;
    private final List<Line> lines = new ArrayList<>();

    public Invoice(String customer) {
        this.customer = customer;
    }

    public void add(String description, int quantity, int unitPrice) {
        lines.add(new Line(description, quantity, unitPrice));
    }

    public String customer() {
        return customer;
    }

    public List<Line> lines() {
        return List.copyOf(lines);
    }

    public int subtotal() {
        int subtotal = 0;
        for (Line line : lines) {
            subtotal += line.amount();
        }
        return subtotal;
    }

    public int tax() {
        return (subtotal() * TAX_PERCENT + 50) / 100;   // redondeo al céntimo
    }

    public int total() {
        return subtotal() + tax();
    }
}
