
    1i                        d Z ddlZddlmZmZmZmZ ddlmZ ddl	m
Z
mZ ddlmZmZ ddlmZ  edd	g
      Z ej$                  e      Zej+                  de       ee
       ee      fdefd       Zej/                  de       ee
       ee      fdedefd       Zej3                  de       ee
       ee      fdefd       Zej3                  de       ee
       ee      fdefd       Zy)zz
Routes for admin site settings management.
Only accessible to authenticated users (can be extended to admin-only later).
    N)	APIRouterDependsHTTPExceptionstatus)AsyncSession)get_dbget_current_user)SiteSettingsUpdateSiteSettingsResponse)SiteSettingsServicez/admin/settingszadmin-settings)prefixtags/)response_modeldbc                 2  K   	 t         j                  d|j                   d       t        j                  |        d{   }|S 7 # t
        $ rC}t         j                  dt        |       d       t        t        j                  d      d}~ww xY ww)	z
    Get current site settings including scraping configuration.
    
    Accessible to authenticated users.
    Can be restricted to admin-only by adding role checks.
    [API] Admin z requesting site settingsNz![API] Error retrieving settings: Texc_infozFailed to retrieve settingsstatus_codedetail)loggerinfoemailr   get_settings	Exceptionerrorstrr   r   HTTP_500_INTERNAL_SERVER_ERRORr   current_usersettingses       C/var/www/html/marco-python-backend/app/api/routes/admin_settings.pyget_site_settingsr&      s     	
l<#5#5"66OPQ,99"== > 
8QADQ==0
 	

s9   B;A A A BA 	B>BBBsettings_updatec                   K   	 t         j                  d|j                   d       t         j                  d| j                  d              t	        j
                  ||        d{   }t         j                  d       t         j                  d|j                  rd	nd
        |S 7 A# t        $ r  t        $ rC}t         j                  dt        |       d       t        t        j                  d      d}~ww xY ww)a  
    Update site settings including scraping configuration.
    
    **Note:** This endpoint will automatically update the scheduler.
    - If `scraping_enabled` is changed to True: job will be scheduled
    - If `scraping_enabled` is changed to False: job will be cancelled
    - If schedule parameters change: existing job will be rescheduled
    
    Parameters:
    - scraping_enabled: Enable/disable automated scraping
    - scraping_frequency: 'daily', 'weekly', or 'custom'
    - scraping_time: Time to run in client's timezone. Format: HH:MM
    - client_timezone: Client timezone (e.g., 'Europe/Madrid', 'America/New_York'). Scheduler converts to UTC automatically.
    - scraping_day_of_week: For weekly scraping (monday-sunday)
    - scraping_custom_cron: Custom cron expression (for frequency='custom')
    - enable_discovery: Enable SERP API discovery during scraping
    - headless_mode: Run browser in headless mode
    - timeout_seconds: Page load timeout (5-60 seconds)
    
    Example:
    ```json
    {
        "scraping_enabled": true,
        "scraping_frequency": "daily",
        "scraping_time": "09:00",
        "client_timezone": "Europe/Madrid",
        "enable_discovery": true,
        "headless_mode": true,
        "timeout_seconds": 15
    }
    ```
    r   z updating site settingsz[API] Update data: T)exclude_unsetNu'   [API] ✅ Settings updated successfullyz[API] Scraping Status: ENABLEDDISABLEDz[API] Error updating settings: r   zFailed to update settingsr   )r   r   r   
model_dumpr   update_settingsscraping_enabledr   r   r   r   r   r    )r'   r   r"   updated_settingsr$   s        r%   update_site_settingsr0   (   s     L
l<#5#5"66MNO)/*D*DSW*D*X)YZ[!4!D!DR!YY=?-;K;\;\ibl-mno Z   
6s1vh?$O==.
 	

s<   DA$B, (B*)A B, )D*B, ,D>>C<<DDz/scraping/enablec                 v  K   	 t         j                  d|j                   d       t        j                  |        d{   }t         j                  d|j
                          |S 7 (# t        $ rC}t         j                  dt        |       d       t        t        j                  d	      d}~ww xY ww)
zT
    Enable automated scraping.
    Uses current frequency and timing settings.
    r   z enabling scheduled scrapingNu+   [API] ✅ Scraping enabled with frequency: z[API] Error enabling scraping: Tr   zFailed to enable scrapingr   )r   r   r   r   enable_scrapingscraping_frequencyr   r   r   r   r   r    r!   s       r%   r2   r2   b   s     

l<#5#5"66RST,<<R@@A(B]B]A^_` A  
6s1vh?$O==.
 	

s9   B9;A* A( 'A* 'B9(A* *	B63>B11B66B9z/scraping/disablec                 \  K   	 t         j                  d|j                   d       t        j                  |        d{   }t         j                  d       |S 7 # t
        $ rC}t         j                  dt        |       d       t        t        j                  d	      d}~ww xY ww)
zW
    Disable automated scraping.
    Scheduled jobs will be cancelled immediately.
    r   z disabling scheduled scrapingNu   [API] ✅ Scraping disabledz [API] Error disabling scraping: Tr   zFailed to disable scrapingr   )r   r   r   r   disable_scrapingr   r   r   r   r   r    r!   s       r%   r5   r5   x   s     

l<#5#5"66STU,==bAA13 B  
7Ax@4P==/
 	

s9   B,;A A A B,A 	B)&>B$$B))B,)__doc__loggingfastapir   r   r   r   sqlalchemy.ext.asyncior   app.api.depsr   r	   app.schemas.site_settingsr
   r   "app.services.site_settings_servicer   router	getLogger__name__r   getr&   patchr0   postr2   r5        r%   <module>rE      s;    = = / 1 N B	+3C2D	E			8	$ C 45v)*

 6
, c"67 v)*6
'6
6
 86
r 0DEv)*

 F
*  1EFv)*

 G
rD   