#!/usr/bin/env python3
"""
Выгрузка РАСХОДОВ по счёту «Наличные» (moneybagId=154399) из Финтабло в Excel.
Только списания (group=outcome), с 24.04.2026. Для сверки с Сашей.
"""
import os
import core
import openpyxl
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side

RR = 154399  # счёт «Наличные»
DATE_FROM = '24.04.2026'
HERE = core.HERE
ftget = core.ftget

# справочники
cats = core.ft_categories()
partners = core.ft_partners()

# все расходы по счёту
rows = core.ft_all('/v1/transaction', moneybagId=RR, group='outcome',
                   dateFrom=DATE_FROM, dateTo=core.year_range()[1])

def dkey(d):
    dd, mm, yy = d.split('.'); return (yy, mm, dd)
rows.sort(key=lambda t: dkey(t['date']))

# Excel
wb = openpyxl.Workbook(); ws = wb.active; ws.title = 'Наличные — расходы'
headers = ['№', 'Дата', 'Статья', 'Контрагент', 'Сумма', 'Месяц (factMonth)', 'Описание']
ws.append(headers)
hfill = PatternFill('solid', fgColor='F2F2F2'); thin = Side(style='thin', color='DDDDDD')
border = Border(left=thin, right=thin, top=thin, bottom=thin)
for c in ws[1]:
    c.font = Font(bold=True); c.fill = hfill; c.border = border
    c.alignment = Alignment(horizontal='center', vertical='center')

total = 0
for i, t in enumerate(rows, 1):
    val = t.get('value') or 0; total += val
    ws.append([i, t['date'], cats.get(t.get('categoryId'), ''),
               partners.get(t.get('partnerId'), ''), val,
               t.get('factMonth', ''), t.get('description', '')])
for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
    for c in row: c.border = border

# итог
last = ws.max_row + 1
ws.cell(last, 4, 'ИТОГО расходы').font = Font(bold=True)
ws.cell(last, 4).alignment = Alignment(horizontal='right')
tc = ws.cell(last, 5, total); tc.font = Font(bold=True)

# формат сумм + ширина
for r in range(2, last + 1):
    ws.cell(r, 5).number_format = '#,##0'
widths = {'A': 5, 'B': 12, 'C': 26, 'D': 30, 'E': 12, 'F': 16, 'G': 45}
for col, w in widths.items(): ws.column_dimensions[col].width = w
ws.freeze_panes = 'A2'

out = os.path.expanduser('~/Desktop/Наличные — расходы с 24.04.2026.xlsx')
wb.save(out)
print(f"Строк расходов: {len(rows)}")
print(f"Сумма расходов: {total:,.0f} ₽".replace(',', ' '))
print(f"Файл: {out}")
