<?php

namespace AIPT\Core\Database;

/**
 * History kayıtlarının periyodik olarak temizlenmesini sağlayan sınıf
 * 
 * @since 2.1.5
 */
class HistoryCleaner {
    /**
     * Cron hook adı
     */
    const CRON_HOOK = 'aipt_clean_history_records';

    /**
     * History tablosunun adı
     *
     * @var string
     */
    private $history_table;

    /**
     * Yapılandırıcı
     */
    public function __construct() {
        global $wpdb;
        $this->history_table = $wpdb->prefix . 'aipt_bulk_generator_history';
    }

    /**
     * Cron işini başlatma metodu
     * 
     * @return bool İşlemin başarılı olup olmadığı
     */
    public function schedule() {
        try {

            if (defined('DISABLE_WP_CRON') && DISABLE_WP_CRON) {
                return false;
            }

            if (!wp_next_scheduled(self::CRON_HOOK)) {
                $scheduled = wp_schedule_event(time(), 'daily', self::CRON_HOOK);
                if ($scheduled === false) {
                    return false;
                }
            }
            
            return true;
        } catch (\Exception $e) {
            return false;
        }
    }

    /**
     * Cron işini durdurma metodu
     * 
     * @return bool İşlemin başarılı olup olmadığı
     */
    public function unschedule() {
        try {
            $timestamp = wp_next_scheduled(self::CRON_HOOK);
            if ($timestamp) {
                $unscheduled = wp_unschedule_event($timestamp, self::CRON_HOOK);
                if ($unscheduled === false) {
                    return false;
                }
            }
            return true;
        } catch (\Exception $e) {
            return false;
        }
    }

    /**
     * Retention period in days for history records.
     * Records older than this will be automatically cleaned.
     */
    const RETENTION_DAYS = 30;

    /**
     * Clean old history records based on retention policy.
     * 
     * @return int|false Number of deleted records or false on error
     */
    public function clean_old_records() {
        global $wpdb;
        
        try {

            $date_threshold = gmdate('Y-m-d H:i:s', strtotime('-' . self::RETENTION_DAYS . ' days'));

            $query = $wpdb->prepare(
                "DELETE FROM {$this->history_table} WHERE created_at < %s",
                $date_threshold
            );

            $deleted_count = $wpdb->query($query);
            
            if ($deleted_count !== false) {
            }
            
            return $deleted_count;
        } catch (\Exception $e) {
            return false;
        }
    }

    /**
     * Cron görevi için callback fonksiyonu
     * Bu fonksiyon herhangi bir hata durumunda eklentinin çalışmasını engellemeyecek
     */
    public static function cron_callback() {
        try {
            $cleaner = new self();
            $cleaner->clean_old_records();
        } catch (\Exception $e) {
        }
    }

    /**
     * WP-Cron'un aktif olup olmadığını kontrol eder
     * 
     * @return bool
     */
    public static function is_wp_cron_enabled() {
        return !(defined('DISABLE_WP_CRON') && DISABLE_WP_CRON);
    }
} 