
import uuid
import random
from datetime import datetime, timedelta

# Constants
PERIOD_ID = 'ea6ce3ec-3b2f-4050-b9cc-517883d5755e'
USER_ID = '69abe0de-7812-41bd-9124-6a7238aee7d1'
BRANCH_ID = '69abe0de-7812-41bd-9124-6a7238aee7d1'
START_DATE = datetime(2025, 4, 1)
MONTH_NAME = 'abr'

# EXPENSES (Debits for EGRESO)
EXPENSES = [
    '262c246f-73e2-443d-b6db-15ee4a854cf6', # SERVICIO DE AGUA
    '13a48a81-400d-45e4-903c-1d5e03b13fd5', # COMBUSTIBLE
    '10d53022-f394-4c70-ba7d-309c0f6dd54a', # MATERIAL DE ESCRITORIO
    '6b061a12-ff2d-4a7b-b656-c1c168a87a34', # PERSONAL A CONTRATO
    '50bb7a58-24f2-4154-8208-794f775843f2', # DOTACIÓN Y SUMINISTRO
]

# INCOMES (Credits for INGRESO)
INCOMES = [
    '77ad3108-4d72-48e8-8a74-30215e4ba3d6', # INGRESOS POR COMISIONES
    '853ce45e-30d7-414b-919a-0351824bdab7', # DESCUENTOS OBTENIDOS
    '110cbab2-1965-4c6e-af5d-5669c6d2eaff', # INGRESOS POR VENTAS DE MERCADERÍAS
]

# CASH (Common account)
CASH_ACC = '50370f99-e6e4-4a11-9f09-5f0418e6108d' # CAJA CHICA

entry_sql_lines = []
detail_sql_lines = []
detail_id_counter = 2000  # Start from 2000 for March (Feb ended ~1300)

entry_sql_lines.append("INSERT INTO `core_accounting_entry` (`relative`, `users_sid`, `global_branch_office_id`, `accounting_period_id`, `entry_type`, `entry_number`, `entry_date`, `currency_rate`, `ufv_rate`, `gloss`, `document_reference`, `status`, `created_by`, `created_at`) VALUES")
detail_sql_lines.append("INSERT INTO `core_accounting_entry_details` (`id`, `entry_relative`, `account_relative`, `auxiliary_id`, `debit`, `credit`, `debit_foreign`, `credit_foreign`) VALUES")

entries_batch = []
details_batch = []

# Probabilities: High INGRESO, Low EGRESO to reflect profit
# INGRESO: 60%, EGRESO: 30%, TRASPASO: 5%, AJUSTE: 5%
entry_types = ['INGRESO', 'EGRESO', 'TRASPASO', 'AJUSTE']
weights = [0.60, 0.30, 0.05, 0.05]

for day in range(31): # 31 days in March 2025
    current_date = START_DATE + timedelta(days=day)
    date_str = current_date.strftime('%Y-%m-%d')
    date_formatted = current_date.strftime('%Y-%m%d')
    
    for i in range(4): # 4 entries per day
        entry_uuid = str(uuid.uuid4())
        entry_num_seq = str(i + 1).zfill(3)
        
        entry_type = random.choices(entry_types, weights=weights, k=1)[0]
        entry_number = f"E-{date_formatted}-{entry_num_seq}"
        gloss = f"Registro {entry_type} dia {date_str} Nro {i+1}"
        
        entry_val = f"('{entry_uuid}', '{USER_ID}', '{BRANCH_ID}', '{PERIOD_ID}', '{entry_type}', '{entry_number}', '{date_str}', '6.960000', '2.50000', '{gloss}', NULL, 'D', '{USER_ID}', NOW())"
        entries_batch.append(entry_val)
        
        # Determine Amount
        if entry_type == 'INGRESO':
            amount = random.randint(3000, 9000) # Higher income
        elif entry_type == 'EGRESO':
            amount = random.randint(500, 2500) # Lower expense
        else:
            amount = random.randint(100, 1000)
            
        amount_fmt = f"{amount:.2f}"
        
        # Logic for Accounts
        if entry_type == 'INGRESO':
            # Debit: Cash, Credit: Income
            debit_acc = CASH_ACC
            credit_acc = random.choice(INCOMES)
        elif entry_type == 'EGRESO':
            # Debit: Expense, Credit: Cash
            debit_acc = random.choice(EXPENSES)
            credit_acc = CASH_ACC
        else:
            # Random logic for others (Traspaso/Ajuste)
            debit_acc = random.choice(EXPENSES)
            credit_acc = CASH_ACC

        # Detail 1: Debit
        detail_id_counter += 1
        d_val = f"({detail_id_counter}, '{entry_uuid}', '{debit_acc}', NULL, '{amount_fmt}', '0.00', '0.00', '0.00')"
        details_batch.append(d_val)
        
        # Detail 2: Credit
        detail_id_counter += 1
        c_val = f"({detail_id_counter}, '{entry_uuid}', '{credit_acc}', NULL, '0.00', '{amount_fmt}', '0.00', '0.00')"
        details_batch.append(c_val)

entry_sql = entry_sql_lines[0] + "\n" + ",\n".join(entries_batch) + ";"
detail_sql = detail_sql_lines[0] + "\n" + ",\n".join(details_batch) + ";"

# Write Files (Concat with month name)
with open(f'database/core_accounting_entry_{MONTH_NAME}_2025.sql', 'w') as f:
    f.write(entry_sql)

with open(f'database/core_accounting_entry_details_{MONTH_NAME}_2025.sql', 'w') as f:
    f.write(detail_sql)

print(f"Generated {MONTH_NAME} 2025 SQL files with profit logic.")
