U
    1i                     @  sz   d Z ddlmZ ddlZddlmZmZ edZdZ	ddddd	d
Z
dddddddZde	fdddddddZdS )z6Trend analysis: period comparisons and drop detection.    )annotationsN)SearchMetricsTrendComparisonseo_optimizerg      4float)currentpreviousreturnc                 C  s"   |dkrdS t | | | d dS )zCalculate percentage change from previous to current.

    Returns:
        Change as percentage (e.g., -25.0 means 25% decrease).
        Returns 0.0 if previous is 0.
    r   g        d      )round)r   r    r   7/opt/web_system/seo_auto/src/analysis/trend_analyzer.pycalculate_change_pct   s    r   r   strr   )r   r   period_labelr	   c              
   C  sB   t || |t| j|jt| j|jt| j|jt| j|j ddS )u0  Compare two periods and produce a TrendComparison.

    Args:
        current: Metrics for the current period.
        previous: Metrics for the previous period.
        period_label: Human-readable label (e.g., "前日比", "7日比").

    Returns:
        TrendComparison with change percentages.
    r   )r   r   r   clicks_change_pctimpressions_change_pctctr_change_pctposition_change)r   r   clicksimpressionsctrr   position)r   r   r   r   r   r   compare_periods   s     r    zlist[TrendComparison]z	list[str])trends	site_namethreshold_pctr	   c              
   C  s  g }| D ]}|j |krZd|j d|jj d|jj d|j dd	}|| td|| |j|krd|j d|jj	 d|jj	 d|jdd	}|| td|| |j
d	krd|j d
|jjdd|jjdd|j
dd	}|| td|| q|std| |S )a  Check trends for significant drops.

    Args:
        trends: List of TrendComparison objects.
        site_name: Site name for logging.
        threshold_pct: Negative percentage threshold (e.g., -20.0).

    Returns:
        List of alert messages for detected drops.
    [u   ] クリック数が急落: u    → z (z+.1fz%)z[%s] %su   ] 表示回数が急落: g       @u   ] 平均順位が悪化: z.1f)z"[%s] No significant drops detected)r   r   r   r   r   appendloggerwarningr   r   r   r   info)r   r   r   alertsZtrendmsgr   r   r   detect_drops7   s(    
*

*

.
r'   )__doc__
__future__r   loggingsrc.models.data_modelsr   r   	getLoggerr"   ZDROP_THRESHOLD_PCTr   r   r'   r   r   r   r   <module>   s   
