<?php
/**
 * @package Hafenstudios\Wellenbrecher
 */

namespace Hafenstudios\Wellenbrecher\Admin;

defined( 'ABSPATH' ) || exit;

/**
 * Spalte "Wellenbrecher" im Kommentar-Listen-Screen (damit auch im
 * Spam-Ordner): zeigt Score und die zwei staerksten Gruende aus dem
 * Comment-Meta _wb_score/_wb_reasons (lesbare Labels, escaped).
 */
class CommentsColumn {

	public const COLUMN = 'wellenbrecher';

	/**
	 * Registriert die Spalten-Hooks.
	 *
	 * @return void
	 */
	public function register(): void {
		add_filter( 'manage_edit-comments_columns', array( $this, 'add_column' ) );
		add_action( 'manage_comments_custom_column', array( $this, 'render_column' ), 10, 2 );
	}

	/**
	 * Fuegt die Spalte hinzu.
	 *
	 * @param mixed $columns Bestehende Spalten.
	 * @return mixed
	 */
	public function add_column( $columns ) {
		if ( is_array( $columns ) ) {
			$columns[ self::COLUMN ] = __( 'Wellenbrecher', 'wellenbrecher' );
		}
		return $columns;
	}

	/**
	 * Rendert den Zellinhalt.
	 *
	 * @param string     $column     Spalten-Key.
	 * @param int|string $comment_id Kommentar-ID.
	 * @return void
	 */
	public function render_column( $column, $comment_id ): void {
		if ( self::COLUMN !== $column ) {
			return;
		}

		$score = get_comment_meta( (int) $comment_id, '_wb_score', true );
		if ( '' === $score || false === $score ) {
			echo '&ndash;';
			return;
		}

		/* translators: %d: Gesamtpunktzahl */
		echo '<strong>' . esc_html( sprintf( __( '%d Punkte', 'wellenbrecher' ), (int) $score ) ) . '</strong>';

		$reasons = get_comment_meta( (int) $comment_id, '_wb_reasons', true );
		if ( ! is_array( $reasons ) || array() === $reasons ) {
			return;
		}

		// Die zwei staerksten Gruende (nach Betrag der Punkte).
		uasort(
			$reasons,
			static function ( $a, $b ) {
				return abs( (int) $b ) <=> abs( (int) $a );
			}
		);

		foreach ( array_slice( $reasons, 0, 2, true ) as $id => $points ) {
			echo '<br />' . esc_html( RuleLabels::label( (string) $id ) . ' (' . sprintf( '%+d', (int) $points ) . ')' );
		}
	}
}
