from app.parsers.base_parser import BaseBankStatementParser
from app.models.transaction import Transaction
from app.generators.iiko_1c_file_generator import Iiko1CFileGenerator

class BankStatementService:
    def __init__(self):
        self.parsers = {}
        self.iiko_generator = Iiko1CFileGenerator()  # если надо

    def register_parser(self, key: str, parser_class):
        # Сохраняем КЛАСС
        self.parsers[key] = parser_class

    def get_parser(self, key: str):
        parser_cls = self.parsers.get(key)
        if not parser_cls:
            raise ValueError(f"Parser for {key} not found")
        # Создаем новый объект парсера
        return parser_cls()

    def process_file(self, file_path: str, bank_key: str, user_inn: str, sender: str) -> str:
        """
        1) Парсит файл (получаем список Transaction).
        2) Подставляет user_inn в зависимости от знака суммы.
        3) Вызывает iiko-генератор с указанным 'sender'.
        4) Возвращает итоговый текст.
        """
        parser = self.get_parser(bank_key)
        transactions = parser.parse(file_path)

        for t in transactions:
            # Если отрицательная сумма => расход => наша фирма платит => payer_inn = user_inn
            if t.amount < 0:
                t.payer_inn = user_inn
                # Можете добавить t.date_outcome = t.date, если надо
            else:
                # Приход => наша фирма получает => recipient_inn = user_inn
                t.recipient_inn = user_inn
                # Если надо: t.date_income = t.date

        # Генерируем файл
        final_text = self.iiko_generator.generate_file_content(transactions, sender=sender)
        return final_text
