<?php
// cron.php – Raccolta offerte Amazon PREMIUM (Creators API)
// Output: JSON per copia-incolla manuale Facebook / WhatsApp

/* ================= CONFIG ================= */

define('CATEGORIES', [
    'Electronics','Computers','VideoGames','HomeImprovement',
    'HealthPersonalCare','Fashion','Baby',
    'GardenAndOutdoor','HomeAndKitchen','Jewelry','Luggage',
    'SportsAndOutdoors','ToolsAndHomeImprovement','Watches','Appliances','Beauty','GroceryAndGourmetFood','HomeAndKitchen','Shoes'
]);

define('MAX_PAGES', 3);
define('MIN_DISCOUNT', 40);
define('MAX_POSTS', 10);

define('POSTS_FILE', __DIR__.'/posts_social.json');
define('PUBLISHED_FILE', __DIR__.'/pubblicati.json');
define('LOG_FILE', __DIR__.'/cron.log');

/* ================= BRAND ================= */

$ALL_BRANDS = array_merge(
    ['Apple','Samsung','Sony','LG','Microsoft','Nintendo','Asus','MSI','Acer','Lenovo','Dell','Intel','AMD','Nvidia','Logitech','Razer','Corsair','Alienware','HyperX','SteelSeries','Kingston','GoPro'],
    ['L\'Oréal','Maybelline','NYX','Essence','Kiko','Nivea','La Roche-Posay','Vichy','CeraVe','Avène','Clinique','Dior','Chanel','Guerlain','Armani','Hugo Boss','Versace','Dolce & Gabbana','Jean Paul Gaultier','Estée Lauder','MAC','Bioderma','Shiseido'],
    ['Nike','Puma','Levi\'s','Calvin Klein','Tommy Hilfiger','Armani','EA7','Ralph Lauren','Lacoste','Diesel','Gucci','Prada','Fendi','Balenciaga','Converse','Vans','New Balance','Under Armour'],
    ['Dyson','Philips','Bosch','Rowenta','Whirlpool','AEG','Samsung','LG','Braun','Moulinex','Kenwood','KitchenAid','DeLonghi'],
    ['Casio','Seiko','Citizen','Tissot','Bulova','Swatch','Rolex','Omega','Tag Heuer','Michael Kors','Cartier']
);

/* ================= KEYWORDS ================= */

$KEYWORDS_BY_CATEGORY = [
    'Electronics'=>['smartphone','tv','oled','4k','tablet','cuffie','auricolari wireless','soundbar','smartwatch','speaker bluetooth'],
    'Computers'=>['notebook','ssd','gaming laptop','ram','gpu','monitor','scheda madre','tastiera meccanica','mouse gaming','router'],
    'VideoGames'=>['ps5','xbox','nintendo switch','controller','giochi ps5','giochi xbox','joystick','console','VR headset'],
    'HealthPersonalCare'=>['profumo','eau de parfum','rasoio','phon','crema viso','shampoo','docciaschiuma','trattamento capelli','bagnoschiuma','sapone'],
    'Fashion'=>['borsa','orologio'],
    'HomeAndKitchen'=>['friggitrice aria','robot cucina','planetaria','pentola','tostapane','bollitore','macchina caffè','frigobar','forno a microonde','lavastoviglie'],
    'GardenAndOutdoor'=>['barbecue','tagliaerba','idropulitrice','amaca','sdraio','tenda','illuminazione esterna','piscina gonfiabile','griglia','attrezzi giardino'],
    'SportsAndOutdoors'=>['fitness','tapis roulant','zaino trekking','bici','pallone','scarpe running','palestra','ellittica','tavola surf','sci'],
    'Watches'=>['orologio','cronografo','smartwatch','watch automatico','watch da polso','orologio sportivo','orologio digitale','orologio subacqueo'],
    'Beauty'=>['rossetto','fondotinta','mascara','palette ombretti','smalto','crema viso','siero','shampoo','profumo','docciaschiuma'],
    'Shoes'=>['sneakers','stivali','sandali','décolleté','scarpe running','scarpe da trekking','mocassini','scarpe casual','scarpe eleganti','scarpe sportive'],
    'Baby'=>['pannolini','seggiolino auto','marsupio','giochi bimbi','bicicletta bambini','lettino','fasciatoio','ciucci','biberon','carrozzina'],
    'Luggage'=>['valigia','trolley','zaino viaggio','borsa cabina','set valigie','borsa weekend','beauty case','borsone','bagaglio a mano','borsa porta computer'],
    'Appliances'=>['lavatrice','asciugatrice','lavastoviglie','forno','frigorifero','microonde','aspirapolvere','frullatore','robot aspirapolvere','condizionatore'],
    'GroceryAndGourmetFood'=>['caffè','tè','cioccolato','snack','olio','pasta','salsa','vino','birra','prodotti biologici'],
    'ToolsAndHomeImprovement'=>['trapano','avvitatore','seghetto','livella','cassetta attrezzi','martello','chiave inglese','pinze','smerigliatrice','scalpello']
];

/* ================= BLACKLIST ================= */

$BLACKLIST = [
    'compatibile','replacement','ricambio','cover','custodia',
    'cavo','adattatore','hub','supporto','pellicola',
    'generic','no brand','brandless','per '
];

/* ================= FUNZIONI ================= */

function logMsg($msg){
    file_put_contents(LOG_FILE,'['.date('Y-m-d H:i:s')."] $msg\n",FILE_APPEND);
}

function isBrandAllowed($title,$brands){
    foreach($brands as $b){
        if(stripos($title,$b)!==false) return true;
    }
    return false;
}

function hasBlacklistedWord($title,$blacklist){
    foreach($blacklist as $b){
        if(stripos($title,$b)!==false) return true;
    }
    return false;
}

function filterByDiscount($items,$min){
    $out=[];
    foreach($items as $i){
        $listing = $i['offersV2']['listings'][0] ?? null;
        if(!$listing) continue;
        $price = $listing['price']['money']['amount'] ?? 0;
        $old = $listing['savingBasis']['money']['amount'] ?? 0;
        if($price>0 && $old>$price){
            $perc = (($old-$price)/$old)*100;
            if($perc>=$min) $out[]=$i;
        }
    }
    return $out;
}

function testoBarrato($s){
    $r='';
    foreach(mb_str_split($s) as $c){ $r.=$c."\u{0336}"; }
    return $r;
}

function generaPost($titolo,$prezzo,$vecchio,$perc,$link){
    $aperture=[
        "🔥 OFFERTA TOP 🔥","💥 IMPERDIBILE 💥","🎯 SUPER SCONTO 🎯",
        "🚀 PREZZO PAZZO 🚀","🌟 MEGA DEAL 🌟"
    ];
    $h=['#offerte','#amazon','#sconti','#risparmio','#amazonpartner'];

    return [
        'facebook'=>
        $aperture[array_rand($aperture)]." 💸 -$perc% di Sconto\n.\n".
        "$titolo\n.\n".
        ($vecchio ? "❌ Prima: ".testoBarrato($vecchio)."\n" : "").
        "✅ Ora: $prezzo\n".
        "💸 -$perc% di Sconto\n.\n".
        "👉 $link\n.\n".
        implode(' ', $h),
        'whatsapp'=>
        "*".$aperture[array_rand($aperture)]."* 💸 -$perc%\n\n".
        "$titolo\n\n".
        ($vecchio ? "❌ Prezzo normale: $vecchio\n" : "").
        "✅ Offerta: $prezzo\n".
        "💸 Risparmi il $perc%\n\n".
        "👉 Approfitta ora: $link"
    ];
}

function shouldPublish($asin,$price,$published){
    if(!isset($published[$asin])) return true;
    $old=$published[$asin]['price'];
    $time=strtotime($published[$asin]['date']);
    return (($old-$price)/$old)*100>=5 || time()-$time>7*86400;
}

/* ================= AVVIO ================= */

logMsg("CRON AVVIATO");

$posts=file_exists(POSTS_FILE)?json_decode(file_get_contents(POSTS_FILE),true):[];
$published=file_exists(PUBLISHED_FILE)?json_decode(file_get_contents(PUBLISHED_FILE),true):[];

$CANDIDATE_OFFERS=[];

foreach(CATEGORIES as $cat){
    for($page=1;$page<=MAX_PAGES;$page++){

        if (!isset($KEYWORDS_BY_CATEGORY[$cat]) || !is_array($KEYWORDS_BY_CATEGORY[$cat])) {
            logMsg("⚠️ Categoria $cat senza keywords, salto");
            continue;
        }

        $kw = $KEYWORDS_BY_CATEGORY[$cat][array_rand($KEYWORDS_BY_CATEGORY[$cat])];

        $_GET['category']=$cat;
        $_GET['page']=$page;
        $_GET['keyword']=$kw;

        ob_start();
        include 'api.php'; // chiama la Creators API
        $json=ob_get_clean();

        $data=json_decode($json,true);
        $items=filterByDiscount($data['searchResult']['items']??[],MIN_DISCOUNT);

        foreach($items as $it){
            $asin=$it['asin'] ?? '';
            $listing = $it['offersV2']['listings'][0] ?? null;
            if(!$listing) continue;
            $pa = $listing['price']['money']['amount'] ?? 0;
            if(!shouldPublish($asin,$pa,$published)) continue;

            $title = $it['itemInfo']['title']['displayValue'] ?? '';
            if(!$title) continue;
            if(!isBrandAllowed($title,$ALL_BRANDS)) continue;
            if(hasBlacklistedWord($title,$BLACKLIST)) continue;

            $oldA = $listing['savingBasis']['money']['amount'] ?? 0;
            $perc = $oldA>0 ? round((($oldA-$pa)/$oldA)*100) : 0;
            $displayOld = $listing['savingBasis']['money']['displayAmount'] ?? '';
            $displayPrice = $listing['price']['money']['displayAmount'] ?? '';

            $CANDIDATE_OFFERS[]=[
                'asin'=>$asin,
                'title'=>$title,
                'price'=>$displayPrice,
                'old'=>$displayOld,
                'perc'=>$perc,
                'link'=>$it['detailPageURL'] ?? '',
                'pa'=>$pa
            ];
        }
        sleep(1);
    }
}

/* ===== ORDINO PER SCONTO ===== */

usort($CANDIDATE_OFFERS,function($a,$b){
    return $b['perc'] <=> $a['perc'];
});

$TOP=array_slice($CANDIDATE_OFFERS,0,MAX_POSTS);

foreach($TOP as $o){
    $post=generaPost($o['title'],$o['price'],$o['old'],$o['perc'],$o['link']);
    $posts[]=[
        'asin'=>$o['asin'],
        'title'=>$o['title'],
        'facebook'=>$post['facebook'],
        'whatsapp'=>$post['whatsapp'],
        'created_at'=>date('Y-m-d H:i:s')
    ];
    $published[$o['asin']]=['price'=>$o['pa'],'date'=>date('Y-m-d H:i:s')];
}

file_put_contents(POSTS_FILE,json_encode($posts,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE));
file_put_contents(PUBLISHED_FILE,json_encode($published,JSON_PRETTY_PRINT));

logMsg("CRON FINITO – TOP OFFERTE PUBBLICATE");
