<?php
/**
 * Class AdminTest
 *
 * @package WPALLSTARS\PluginStarterTemplate
 */

use WPALLSTARS\PluginStarterTemplate\Admin\Admin;
use WPALLSTARS\PluginStarterTemplate\Core;

/**
 * Admin test case.
 */
class AdminTest extends WP_Mock\Tools\TestCase {

    /**
     * Test instance
     *
     * @var Admin
     */
    private $admin;

    /**
     * Core mock
     *
     * @var Core
     */
    private $core;

    /**
     * Set up test environment
     */
    public function setUp(): void {
        parent::setUp();
        
        // Set up mocks
        WP_Mock::setUp();
        
        // Mock Core class
        $this->core = $this->createMock(Core::class);
        
        // Set up WordPress function mocks
        WP_Mock::userFunction('add_action', [
            'times' => 1,
            'args' => ['admin_enqueue_scripts', \WP_Mock\Functions::type('array')],
        ]);
        
        // Create instance of Admin class
        $this->admin = new Admin($this->core);
    }

    /**
     * Tear down test environment
     */
    public function tearDown(): void {
        WP_Mock::tearDown();
        parent::tearDown();
    }

    /**
     * Test constructor
     */
    public function test_constructor() {
        // Verify that the constructor initializes hooks
        $this->assertInstanceOf(Admin::class, $this->admin);
    }

    /**
     * Test enqueue_admin_assets
     */
    public function test_enqueue_admin_assets() {
        // Set up WordPress function mocks
        WP_Mock::userFunction('wp_enqueue_style', [
            'times' => 1,
            'args' => ['wpst-admin-styles', \WP_Mock\Functions::type('string'), [], \WP_Mock\Functions::type('string')],
        ]);
        
        WP_Mock::userFunction('wp_enqueue_script', [
            'times' => 1,
            'args' => ['wpst-admin-scripts', \WP_Mock\Functions::type('string'), ['jquery'], \WP_Mock\Functions::type('string'), true],
        ]);
        
        WP_Mock::userFunction('wp_localize_script', [
            'times' => 1,
            'args' => ['wpst-admin-scripts', 'wpstData', \WP_Mock\Functions::type('array')],
        ]);
        
        WP_Mock::userFunction('esc_html__', [
            'times' => 2,
            'args' => [\WP_Mock\Functions::type('string'), 'wp-plugin-starter-template'],
            'return' => 'Translated string',
        ]);
        
        WP_Mock::userFunction('admin_url', [
            'times' => 1,
            'args' => ['admin-ajax.php'],
            'return' => 'http://example.org/wp-admin/admin-ajax.php',
        ]);
        
        WP_Mock::userFunction('wp_create_nonce', [
            'times' => 1,
            'args' => ['wpst-admin-nonce'],
            'return' => '1234567890',
        ]);
        
        // Call the method
        $this->admin->enqueue_admin_assets('plugins.php');
        
        // If we get here, the test passed
        $this->assertTrue(true);
    }
}