<?php

namespace Blazemedia\Affiliation\Utils;

class Logger {


    /**
     * Scrive un messaggio di log nel file logs/app.log nella root del progetto Bedrock.
     * Se la directory logs/ non esiste, la crea con permessi 0755.
     *
     * @param string $message Il messaggio da loggare.
     * @param string $level   Livello di log (es. INFO, WARNING, ERROR).
     */
    public static function write( $message, $level = 'INFO' ) {


        // QUI CI VANNO DELLE VARIABILI DI ENVIRONMENT DEL PLUGIN
        //if(!defined('WP_DEBUG_LOG') || WP_DEBUG_LOG != 'true') return;
       
        // Percorso root del progetto e file di log
       /*  $project_root = dirname( ABSPATH, 2 );
        $log_dir      = $project_root . '/logs';
        $log_file     = $log_dir . '/app.log';

        // Crea la cartella logs/ se non esiste
        if ( ! file_exists( $log_dir ) ) {
            wp_mkdir_p( $log_dir );
        } */

        // Informazioni sul chiamante PHP
        $trace  = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2 );
        $caller = isset( $trace[1] ) ? $trace[1] : [];
        $file   = isset( $caller['file'] ) ? wp_basename( $caller['file'] ) : '';
        $line   = isset( $caller['line'] ) ? $caller['line'] : '';
        $func   = isset( $caller['function'] ) ? $caller['function'] : '';

        // Informazioni sulla richiesta HTTP, se disponibili
        $method      = isset( $_SERVER['REQUEST_METHOD'] ) ? $_SERVER['REQUEST_METHOD'] : 'CLI';
        $host        = isset( $_SERVER['HTTP_HOST'] ) ? $_SERVER['HTTP_HOST'] : '';
        $uri         = isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '';
        $remote_addr = isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '';

        // Costruisci il contesto: file:line [function], METHOD host/uri, remote IP
        $context_parts = [];
        if ( $file && $line ) {
            $context_parts[] = "{$file}:{$line}" . ( $func ? " [{$func}]" : '' );
        }
        $context_parts[] = "{$method} {$host}{$uri}";
        if ( $remote_addr ) {
            $context_parts[] = "IP:{$remote_addr}";
        }
        $context = implode(' | ', $context_parts);

        // Prepara la riga di log con timestamp, livello e contesto
        $date = date( 'Y-m-d H:i:s' );
        $line = sprintf( "%s [%s] (%s) %s%s", $date, strtoupper( $level ), $context, $message, PHP_EOL );

        error_log("\n{$line}\n");
        //access_log( $line );

        // Scrive in append nel file di log con lock
        // file_put_contents( $log_file, $line, FILE_APPEND | LOCK_EX );    
    }
}
