from datetime import datetime
from models.financial_information import FinancialInformationTable


class FinancialInformationTableService:
    @staticmethod
    async def save_record(db, current_user, **kwargs):
        """
        Save a record into the financial_information_tables table.
        """
        page_id = kwargs.get("page_id")
        if page_id:
            # Check if the record with the given page_id exists
            existing_record = await db.execute_query(
                FinancialInformationTable,
                filters=[FinancialInformationTable.page_id == page_id],
                limit=1,
            )
            if existing_record:
                existing_data = existing_record[0].to_dict()
                updated_data = {**existing_data, **kwargs}
                updated_record = FinancialInformationTable(**updated_data)
                updated_record.update_modify(current_user.user_id)

                await db.update_record(
                    FinancialInformationTable,
                    filters=[FinancialInformationTable.page_id == page_id],
                    values=updated_data,
                )
                return updated_record

        # If no existing record, insert a new one
        new_record = FinancialInformationTable(
            **kwargs, created_at=datetime.now(), created_by=current_user.user_id
        )
        new_record.update_modify(current_user.user_id)
        record = await db.execute_insert(new_record)
        return record

    @staticmethod
    async def get_record_by_id(db, page_id, project_id):
        """
        Get a financial information table by id.
        """
        return await db.execute_query(
            FinancialInformationTable,
            filters=[
                FinancialInformationTable.page_id == page_id,
                FinancialInformationTable.project_id == project_id,
            ],
            limit=1,
            first=True,
        )
