import jdatetime
from datetime import datetime

def to_shamsi(date_input: str | datetime) -> str:
    """
    Converts a datetime object or a string to Shamsi (Jalali) string format.
    Example output: 1402/05/12 14:30
    """
    if not date_input:
        return ""
    
    if isinstance(date_input, str):
        try:
            # Handle standard SQLite format 'YYYY-MM-DD HH:MM:SS' or ISO format
            # Sometimes SQLite returns purely 'YYYY-MM-DD HH:MM:SS'
            # We replace ' ' with 'T' for fromisoformat compatibility if needed
            dt_str = date_input.replace(' ', 'T')
            # Extract only up to seconds
            if '.' in dt_str:
                dt_str = dt_str.split('.')[0]
            dt = datetime.fromisoformat(dt_str)
        except Exception as e:
            return str(date_input)
    else:
        dt = date_input

    # Convert to jdatetime
    jdt = jdatetime.datetime.fromgregorian(datetime=dt)
    return jdt.strftime("%Y/%m/%d %H:%M")
