
    ?i                         d Z ddlmZmZmZ ddlmZmZ ddedeeef   fdZ	dee   dee   fdZ
d	ee   dee   fd
Zdee   dededefdZdee   dee   fdZddee   dedefdZy)z$Date utilities for last30days skill.    )datetime	timedeltatimezone)OptionalTupledaysreturnc                     t        j                  t        j                        j	                         }|t        |       z
  }|j                         |j                         fS )zvGet the date range for the last N days.

    Returns:
        Tuple of (from_date, to_date) as YYYY-MM-DD strings
    )r   )r   nowr   utcdater   	isoformat)r   today	from_dates      P/home/ubuntu/.openclaw/workspace/skills/last30days-official/scripts/lib/dates.pyget_date_ranger      sI     LL&++-E	t,,I %//"333    date_strc                 6   | sy	 t        |       }t        j                  |t        j                        S # t
        t        f$ r Y nw xY wg d}|D ]G  }	 t        j                  | |      j                  t        j                        c S # t
        $ r Y Ew xY w y)z`Parse a date string in various formats.

    Supports: YYYY-MM-DD, ISO 8601, Unix timestamp
    Ntz)%Y-%m-%dz%Y-%m-%dT%H:%M:%Sz%Y-%m-%dT%H:%M:%SZz%Y-%m-%dT%H:%M:%S%zz%Y-%m-%dT%H:%M:%S.%f%z)tzinfo)	floatr   fromtimestampr   r   
ValueError	TypeErrorstrptimereplace)r   tsformatsfmts       r   
parse_dater#      s    
 8_%%bX\\::	" G  	$$Xs3;;8<<;PP 		 s!   /5 AA3B

	BBr    c                     | y	 t        j                  | t        j                        }|j	                         j                         S # t        t        t        f$ r Y yw xY w)z,Convert Unix timestamp to YYYY-MM-DD string.Nr   )	r   r   r   r   r   r   r   r   OSError)r    dts     r   timestamp_to_dater'   3   sS    	z##B8<<8wwy""$$	7+ s   AA AAr   to_datec                 (   | sy	 t        j                  | d      j                         }t        j                  |d      j                         }t        j                  |d      j                         }||cxk  r|k  ry ||k  ryy# t        $ r Y yw xY w)a  Determine confidence level for a date.

    Args:
        date_str: The date to check (YYYY-MM-DD or None)
        from_date: Start of valid range (YYYY-MM-DD)
        to_date: End of valid range (YYYY-MM-DD)

    Returns:
        'high', 'med', or 'low'
    lowr   high)r   r   r   r   )r   r   r(   r&   startends         r   get_date_confidencer.   >   s     x499;!!)Z8==?499;B# %Z  s   A7B =B 	BBc                     | sy	 t        j                  | d      j                         }t        j                  t        j
                        j                         }||z
  }|j                  S # t        $ r Y yw xY w)z\Calculate how many days ago a date is.

    Returns None if date is invalid or missing.
    Nr   )r   r   r   r   r   r   r   r   )r   r&   r   deltas       r   days_agor1   ]   sj    
 x499;X\\*//1
zz s   A%A+ +	A76A7max_daysc                 ^    t        |       }|y|dk  ry||k\  ryt        dd||z  z
  z        S )zWCalculate recency score (0-100).

    0 days ago = 100, max_days ago = 0, clamped.
    r   d      )r1   int)r   r2   ages      r   recency_scorer8   n   sC    
 8
C
{
Qw
hsa#.()**r   N)   )__doc__r   r   r   typingr   r   r6   strr   r#   r   r'   r.   r1   r8    r   r   <module>r>      s    * 2 2 "4 4eCHo 4# 8H+= B(5/ hsm (3- C # RU >x} # "+HSM +S +# +r   