<?php
/**
 * BookiFlex Core
 *
 * @package    BookiFlex
 * @subpackage Core
 * @author     BookiFlex
 * @copyright  Copyright (c) 2025 BookiFlex
 * @license    GPL-2.0-or-later
 *
 * @link       https://bookiflex.com
 */

declare(strict_types=1);

namespace BookiFlex\Core\Contract;

defined( 'ABSPATH' ) || exit;

/**
 * Interface for extension activators
 *
 * Extensions implement this interface to provide their own activation logic
 * and database schemas during plugin activation/deactivation.
 */
interface ActivatorInterface
{
    /**
     * Get extension-specific database schemas
     *
     * Returns array of Schema class names that should be registered
     * during table creation/migration.
     *
     * @return array Array of schema class names
     */
    public function getSchemas(): array;

    /**
     * First activation of the system (shared setup)
     *
     * This method is called ONLY ONCE when BookiFlex is activated for the
     * first time (any edition). Use this for shared setup that should happen
     * only once across both Free and Pro editions.
     *
     * @return void
     */
    public function onFirstActivation(): void;

    /**
     * Regular activation
     *
     * This method is called EVERY TIME the plugin is activated.
     * Use this for extension-specific setup that needs to run on each activation.
     *
     * @return void
     */
    public function onActivation(): void;

    /**
     * Deactivation
     *
     * This method is called when the plugin is deactivated.
     * Use this for cleanup tasks like clearing transients or temporary data.
     *
     * @return void
     */
    public function onDeactivation(): void;
}