<?php

namespace NewsletterBridge\Services\Content;

/**
 * Classe per controllare le date da escludere per l'invio newsletter
 */
class CalendarChecker {

    function __construct( protected $config ) {
        $this->config = $config;
    }

    /**
     * checkDate
     *
     * @return string 'ok' or the reason to avoid sending
     */
    function checkDate() : string {
        $today = date('Y-m-d');
        foreach ($this->config->datesToExclude as $item) {
            $raw = is_object($item) ? ($item->date ?? '') : (is_array($item) ? ($item['date'] ?? '') : (string)$item);
            $raw = trim((string)$raw);
            if ($raw === '') {
                continue;
            }

            // Sostituisce XXXX con l'anno corrente
            $normalized = preg_replace('/^XXXX(?=-)/', date('Y'), $raw);

            // Normalizza componenti mancanti: se manca mese/giorno, non coincide mai con una data specifica
            $parts = explode('-', $normalized);
            $year = $parts[0] ?? '';
            $month = $parts[1] ?? '';
            $day = $parts[2] ?? '';

            // Se abbiamo anno, mese e giorno, confrontiamo con oggi
            if ($year && $month && $day) {
                $candidate = sprintf('%04d-%02d-%02d', intval($year), intval($month), intval($day));
                if ($candidate === $today) {
                    return is_object($item) ? ($item->description ?? 'Data esclusa') : 'Data esclusa';
                }
            }
        }
        return 'ok';
    }

}
