from sqlalchemy import (
    Column,
    String,
    Date,
    Integer,
    Text,
    DateTime,
    ForeignKey,
    func,
    text,
)
from sqlalchemy.orm import relationship
from app.models.base import BaseModel


class PengajuanLembur(BaseModel):
    __tablename__ = "pengajuan_lembur"

    user_id = Column(
        String(36), ForeignKey("users.id", ondelete="NO ACTION"), nullable=False
    )
    kanit_id = Column(
        String(36), ForeignKey("users.id", ondelete="NO ACTION"), nullable=True
    )
    manager_id = Column(
        String(36), ForeignKey("users.id", ondelete="NO ACTION"), nullable=True
    )
    kanit_keuangan_id = Column(
        String(36), ForeignKey("users.id", ondelete="NO ACTION"), nullable=True
    )

    status_slug = Column(
        String(255),
        ForeignKey("status.slug", ondelete="NO ACTION"),
        nullable=False,
        server_default=text("'diajukan'"),
        default=text("'diajukan'"),
    )

    tanggal_spl = Column(Date, nullable=False)
    tanggal = Column(Date, nullable=False)
    sifat = Column(String(255), nullable=False)
    uraian = Column(Text, nullable=False)
    total = Column(Integer, nullable=False)
    list_staff = relationship(
        "LemburItem",
        back_populates="lembur",
        cascade="all, delete-orphan",
        order_by="LemburItem.urutan",
    )
    status = relationship("Status", foreign_keys=[status_slug], lazy="joined")
    user = relationship("User", foreign_keys=[user_id], lazy="joined")
    kanit = relationship("User", foreign_keys=[kanit_id], lazy="joined")
    manager = relationship("User", foreign_keys=[manager_id], lazy="joined")
    kanit_keuangan = relationship(
        "User", foreign_keys=[kanit_keuangan_id], lazy="joined"
    )
