from sqlalchemy import Column, Integer, func, select
from sqlalchemy.orm import column_property
from sqlalchemy.ext.declarative import declared_attr
from src.models.users.models import HrmsEmployeeProfile

class AuditMixin:
    created_by = Column(Integer, nullable=True)
    updated_by = Column(Integer, nullable=True)

    @declared_attr
    def created_by_name(cls):
        return column_property(
            select(
                func.concat(
                    HrmsEmployeeProfile.first_name, " ", HrmsEmployeeProfile.last_name
                )
            )
            .where(HrmsEmployeeProfile.user_id == cls.created_by)
            .correlate_except(HrmsEmployeeProfile)
            .scalar_subquery()
        )

    @declared_attr
    def updated_by_name(cls):
        return column_property(
            select(
                func.concat(
                    HrmsEmployeeProfile.first_name, " ", HrmsEmployeeProfile.last_name
                )
            )
            .where(HrmsEmployeeProfile.user_id == cls.updated_by)
            .correlate_except(HrmsEmployeeProfile)
            .scalar_subquery()
        )
