<?php
/**
 * Featurable interface and trait definitions.
 *
 * @package DokanKits\Features
 * @since   3.0.0
 */

namespace DokanKits\Features;

/**
 * Feature Interface
 *
 * This interface defines the contract for all feature implementations.
 * Features provide modular functionality to the plugin that can be
 * enabled or disabled independently.
 *
 * @since   3.0.0
 * @package DokanKits\Features
 */
interface Featurable {

	/**
	 * Check if the feature is enabled
	 *
	 * Determines whether the feature should be active based on
	 * user settings or other conditions.
	 *
	 * @since 3.0.0
	 * @return bool True if the feature is enabled, false otherwise.
	 */
	public function is_enabled(): bool;

	/**
	 * Get feature slug
	 *
	 * Returns a unique identifier for the feature.
	 *
	 * @since 3.0.0
	 * @return string The feature slug.
	 */
	public function get_slug(): string;

	/**
	 * Get settings group
	 *
	 * Returns the settings group where this feature's options belong.
	 *
	 * @since 3.0.0
	 * @return string Settings group identifier.
	 */
	public function get_settings_group(): string;

	/**
	 * Get settings section
	 *
	 * Returns the settings section within the group where this feature's options belong.
	 *
	 * @since 3.0.0
	 * @return string Settings section identifier.
	 */
	public function get_settings_section(): string;

	/**
	 * Get total features
	 *
	 * Returns the number of sub-features contained within this feature.
	 *
	 * @since 3.0.0
	 * @return int Number of sub-features.
	 */
	public function get_total_features(): int;
}
