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

public class Fatura {
    private int codigo;
    private Cliente cliente;
    private String dataEmissao;
    private List<Produto3> produtos;
    private double valorTotal;

    // Construtor
    public Fatura(int codigo, Cliente cliente, String dataEmissao) {
        this.codigo = codigo;
        this.cliente = cliente;
        this.dataEmissao = dataEmissao;
        this.produtos = new ArrayList<>();
        this.valorTotal = 0.0;
    }

    // Métodos de negócio
    public void adicionarProduto(Produto3 p) {
        if (p != null) {
            this.produtos.add(p);
            this.valorTotal += p.getValor();
            System.out.println("Produto '" + p.getNome() + "' adicionado à fatura.");
        }
    }

    public void removerProduto(Produto3 p) {
        if (this.produtos.remove(p)) {
            this.valorTotal -= p.getValor();
            System.out.println("Produto '" + p.getNome() + "' removido da fatura.");
        } else {
            System.out.println("Produto não encontrado na fatura.");
        }
    }

    public void imprimirFatura() {
        System.out.println("\n========================================================");
        System.out.println("                   FATURA COMERCIAL Nº " + this.codigo);
        System.out.println("========================================================");
        System.out.println("Data de Emissão: " + this.dataEmissao);
        System.out.println("--------------------------------------------------------");
        System.out.println("DADOS DO CLIENTE:");
        System.out.println("Razão Social: " + this.cliente.getRazaoSocial());
        System.out.println("CNPJ: " + this.cliente.getCnpj() + " | IE: " + this.cliente.getInscricaoEstadual());
        System.out.println("Endereço: " + this.cliente.getEndereco());
        System.out.println("Contato: " + this.cliente.getEmail() + " | Tel: " + this.cliente.getCelular());
        System.out.println("--------------------------------------------------------");
        System.out.println("ITENS DA FATURA:");
        System.out.printf("%-6s | %-20s | %-10s | %-10s\n", "CÓD", "NOME", "NCM", "VALOR (R$)");
        System.out.println("--------------------------------------------------------");
        
        for (Produto3 p : this.produtos) {
            System.out.printf("%-6d | %-20s | %-10s | R$ %8.2f\n", 
                p.getCodigo(), p.getNome(), p.getNcm(), p.getValor());
        }
        
        System.out.println("--------------------------------------------------------");
        System.out.printf("VALOR TOTAL DA FATURA:                    R$ %8.2f\n", this.valorTotal);
        System.out.println("========================================================\n");
    }

    // Getters e Setters
    public int getCodigo() { return codigo; }
    public Cliente getCliente() { return cliente; }
    public String getDataEmissao() { return dataEmissao; }
    public List<Produto3> getProdutos() { return produtos; }
    public double getValorTotal() { return valorTotal; }
}