import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from itertools import combinations
from collections import Counter
from fpdf import FPDF

# Cargar CSV
df = pd.read_csv('ventas_marzo_2025.csv', encoding='latin1', parse_dates=['fechaEntrega'])

# Verifica las columnas
print(df.columns)

# 1. Productos más vendidos (por cantidad)
top_productos = df.groupby('nom_prod')['cantidad'].sum().sort_values(ascending=False).head(10)
print("Productos más vendidos:")
print(top_productos)

# 2. Total de ventas por producto (por importe $)
top_ingresos = df.groupby('nom_prod')['total_producto'].sum().sort_values(ascending=False).head(10)
print("Productos con más ingresos:")
print(top_ingresos)

# 3. Clientes que más compraron
top_clientes = df.groupby('nom_empresa')['total_producto'].sum().sort_values(ascending=False).head(10)
print("👨‍🍳 Clientes top:")
print(top_clientes)

# 4. Gráfica de ventas por día
df['fechaEntrega'] = pd.to_datetime(df['fechaEntrega'], dayfirst=True)
ventas_diarias = df.groupby(df['fechaEntrega'].dt.date)['total_producto'].sum()

# Guardar gráfica como imagen
plt.figure(figsize=(10, 5))
ventas_diarias.plot(kind='line', marker='o', title='Ventas diarias - Marzo 2025')
plt.xlabel("Fecha")
plt.ylabel("Total vendido ($)")
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('grafica_ventas_diarias.png')
plt.close()

# 5. Productos que se venden juntos
pedidos_productos = df.groupby('pedidoID')['nom_prod'].apply(list)
combos = Counter()
for productos in pedidos_productos:
    for combo in combinations(set(productos), 2):
        combos[tuple(sorted(combo))] += 1

print("🔗 Productos que se venden juntos con frecuencia:")
combos_comunes = combos.most_common(10)
for combo, count in combos_comunes:
    print(f"{combo}: {count} veces")

# 6. Crear PDF con resultados
pdf = FPDF()
pdf.set_auto_page_break(auto=True, margin=15)
pdf.add_page()

pdf.set_font("Arial", 'B', 16)
pdf.cell(0, 10, "Reporte de Ventas - Marzo 2025", ln=True, align='C')

# Productos más vendidos
pdf.set_font("Arial", 'B', 12)
pdf.cell(0, 10, "\n Productos más vendidos (por cantidad):", ln=True)
pdf.set_font("Arial", size=10)
for producto, cantidad in top_productos.items():
    pdf.cell(0, 8, f"{producto}: {cantidad:.2f} unidades", ln=True)

# Productos con más ingresos
pdf.set_font("Arial", 'B', 12)
pdf.cell(0, 10, "\n Productos con más ingresos:", ln=True)
pdf.set_font("Arial", size=10)
for producto, total in top_ingresos.items():
    pdf.cell(0, 8, f"{producto}: ${total:.2f}", ln=True)

# Clientes top
pdf.set_font("Arial", 'B', 12)
pdf.cell(0, 10, "\n Clientes top:", ln=True)
pdf.set_font("Arial", size=10)
for cliente, total in top_clientes.items():
    pdf.cell(0, 8, f"{cliente}: ${total:.2f}", ln=True)

# Combos más comunes
pdf.set_font("Arial", 'B', 12)
pdf.cell(0, 10, "\n Productos que se venden juntos:", ln=True)
pdf.set_font("Arial", size=10)
for combo, count in combos_comunes:
    productos_combo = " + ".join(combo)
    pdf.cell(0, 8, f"{productos_combo}: {count} veces", ln=True)

# Página nueva con gráfica
pdf.add_page()
pdf.set_font("Arial", 'B', 12)
pdf.cell(0, 10, " Ventas diarias (gráfica)", ln=True)
pdf.image("grafica_ventas_diarias.png", x=10, y=25, w=180)

# Guardar PDF
pdf.output("reporte_ventas_marzo_2025.pdf")
print("✅ PDF generado correctamente: reporte_ventas_marzo_2025.pdf")
