import openpyxl
import sys
import re

def get_safe_float(val):
    if val is None:
        return 0.0
    try:
        return float(val)
    except ValueError:
        return 0.0

def get_safe_str(val):
    if val is None:
        return ""
    return str(val).strip().replace("'", "''")

try:
    wb = openpyxl.load_workbook('LECTURA MEDIDORES.xlsx', read_only=True, data_only=True)
    
    table_name = "lecturas_agua"
    
    # Create Table SQL
    create_sql = f"""CREATE TABLE IF NOT EXISTS {table_name} (
    id INT AUTO_INCREMENT PRIMARY KEY,
    periodo VARCHAR(100),
    dpto_nombre VARCHAR(50),
    codigo VARCHAR(50),
    lectura_anterior DECIMAL(10,2) DEFAULT 0,
    lectura_actual DECIMAL(10,2) DEFAULT 0,
    consumo DECIMAL(10,2) DEFAULT 0,
    monto DECIMAL(10,2) DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
"""
    print(create_sql)
    print(f"INSERT INTO {table_name} (periodo, dpto_nombre, codigo, lectura_anterior, lectura_actual, consumo, monto) VALUES")
    
    values_list = []
    
    for sheet_name in wb.sheetnames:
        ws = wb[sheet_name]
        periodo = sheet_name
        
        # Determine Header Row. Usually row 4 based on inspection.
        # Format: PISO, PROPIETARIO, DPTO., CODIGO, Anterior, Actual, Total m3, ...
        
        start_row = 5 # Data seems to start at row 5 based on inspection
        
        for row in ws.iter_rows(min_row=start_row, values_only=True):
            # Check safely for valid data
            if not row or len(row) < 5:
                continue
                
            dpto_str = get_safe_str(row[2]) # DPTO. column
            codigo = get_safe_str(row[3]) # CODIGO
            
            if not dpto_str or "TOTAL" in dpto_str.upper():
                continue
            
            anterior = get_safe_float(row[4])
            actual = get_safe_float(row[5])
            consumo = get_safe_float(row[6])
            
            # Amount seems to be column 8 or 9. Inspection row 5: ..., 3.69, -625. Last one is Bs.
            # Row index 8 is 9th column (A=0.. I=8)
            monto = get_safe_float(row[8]) 
            
            val_str = f"('{periodo}', '{dpto_str}', '{codigo}', {anterior}, {actual}, {consumo}, {monto})"
            values_list.append(val_str)

    if values_list:
        print(",\n".join(values_list) + ";")
    else:
        print("-- No rows found")

except Exception as e:
    sys.stderr.write(f"Error: {e}\n")
    sys.exit(1)
