<?php
/**
 * Plugin Name: Jewelry Invoice & Certificate Generator
 * Description: Auto-generates GST/VAT-compliant invoices and purchase certificates for jewelry and precious metal WooCommerce stores. Supports global markets, multi-currency, hallmark standards, and PDF delivery.
 * Version: 1.1
 * Requires at least: 5.8
 * Requires PHP: 7.4
 * Author: Vimal Kava
 * License: GPL v2 or later
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: jewelry-invoice-certificate-generator
 * Domain Path: /languages
 */

defined( 'ABSPATH' ) || exit;

// Define Plugin Constants
define( 'JICG_VERSION', '1.1.1' );
define( 'JICG_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'JICG_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'JICG_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );

if ( is_admin() ) {
    require_once JICG_PLUGIN_DIR . 'includes/veyondtech/class-precioussuite-registry.php';
    require_once JICG_PLUGIN_DIR . 'includes/veyondtech/class-precioussuite-admin.php';

    Veyondtech_Admin::init( array(
        'version'   => '1.1.11',
        'base_path' => JICG_PLUGIN_DIR . 'includes/veyondtech/',
        'base_url'  => JICG_PLUGIN_URL . 'includes/veyondtech/',
    ) );

    add_action( 'init', 'jicg_register_veyondtech_module' );
}

function jicg_register_veyondtech_module() {
    veyondtech_register_module( array(
        'slug'         => 'invoice-generator',
        'name'         => __( 'Invoice Generator', 'jewelry-invoice-certificate-generator' ),
        'label'        => __( 'Invoice & Certificates', 'jewelry-invoice-certificate-generator' ),
        'description'  => __( 'Generate jewelry invoices, certificate templates, emails, WhatsApp messages, and PDFs.', 'jewelry-invoice-certificate-generator' ),
        'settings_url' => admin_url( 'admin.php?page=jicg-settings' ),
        'plugin_file'  => plugin_basename( __FILE__ ),
        'wporg_slug'   => 'jewelry-invoice-certificate-generator',
        'position'     => 40,
        'stats'        => 'jicg_veyondtech_stats',
    ) );
}

// HPOS Compatibility
add_action( 'before_woocommerce_init', function() {
    if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
    }
} );

// Check Premium Function
if ( ! function_exists( 'jicg_is_premium' ) ) {
    function jicg_is_premium() {
        return true;
    }
}

// Load Core Includes
require_once JICG_PLUGIN_DIR . 'includes/class-jicg-core.php';
require_once JICG_PLUGIN_DIR . 'includes/class-jicg-pdf-generator.php';
require_once JICG_PLUGIN_DIR . 'includes/class-jicg-certificate.php';
require_once JICG_PLUGIN_DIR . 'includes/class-jicg-tax-engine.php';
require_once JICG_PLUGIN_DIR . 'includes/class-jicg-currency.php';
require_once JICG_PLUGIN_DIR . 'includes/class-jicg-email.php';
require_once JICG_PLUGIN_DIR . 'includes/class-jicg-whatsapp.php';


// Admin Includes
if ( is_admin() ) {
    require_once JICG_PLUGIN_DIR . 'admin/class-jicg-admin.php';
}

// Initialize Plugin
function jicg_init() {
    // load_plugin_textdomain( 'jewelry-invoice-certificate-generator', false, dirname( JICG_PLUGIN_BASENAME ) . '/languages' ); // Discouraged since WP 4.6
    
    // Check if WooCommerce is active
    if ( ! class_exists( 'WooCommerce' ) ) {
        add_action( 'admin_notices', 'jicg_woocommerce_missing_notice' );
        return;
    }

    // Initialize core class
    JICG_Core::instance();
    JICG_PDF_Generator::instance();
    
    // Initialize admin class if in admin area
    if ( is_admin() ) {
        JICG_Admin::instance();
    }
}
add_action( 'plugins_loaded', 'jicg_init' );

function jicg_woocommerce_missing_notice() {
    echo '<div class="error"><p>' . esc_html__( 'Jewelry Invoice & Certificate Generator requires WooCommerce to be installed and active.', 'jewelry-invoice-certificate-generator' ) . '</p></div>';
}

// Activation hook
register_activation_hook( __FILE__, 'jicg_activate' );
function jicg_activate() {
    // Setup initial database options and tables if necessary
    if ( ! get_option( 'jicg_invoice_prefix' ) ) {
        update_option( 'jicg_invoice_prefix', 'INV' );
    }
}

// Deactivation hook
register_deactivation_hook( __FILE__, 'jicg_deactivate' );
function jicg_deactivate() {
    flush_rewrite_rules();
}

function jicg_veyondtech_stats() {
    return array(
        array(
            'label' => __( 'Invoice Prefix', 'jewelry-invoice-certificate-generator' ),
            'value' => get_option( 'jicg_invoice_prefix', 'INV' ),
        ),
    );
}
