from datetime import datetime
from uuid import uuid4

from sqlalchemy import Boolean, Column, DateTime, String
from sqlalchemy.dialects.postgresql import JSON, UUID

from app.database import Base


class NINVerification(Base):
    __tablename__ = "nin_verifications"

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid4, index=True)
    nin = Column(String(11), unique=True, nullable=False, index=True)
    
    # Verification data from Dojah
    first_name = Column(String(100), nullable=True)
    last_name = Column(String(100), nullable=True)
    middle_name = Column(String(100), nullable=True)
    date_of_birth = Column(String(20), nullable=True)
    gender = Column(String(20), nullable=True)
    phone_number = Column(String(20), nullable=True)
    email = Column(String(255), nullable=True)
    employment_status = Column(String(50), nullable=True)
    marital_status = Column(String(50), nullable=True)
    
    # Store full response as JSON for flexibility
    raw_data = Column(JSON, nullable=True)
    
    # Verification metadata
    verified = Column(Boolean, default=True, nullable=False)
    verified_at = Column(DateTime, default=datetime.utcnow, nullable=False)
    created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)

    def __repr__(self):
        return f"<NINVerification {self.nin}: {self.first_name} {self.last_name}>"
