<?php
defined( 'ABSPATH' ) || exit;

class NASEO_License {

    const OPTION_KEY    = 'naseo_license_key';
    const OPTION_STATUS = 'naseo_license_status';
    const OPTION_DOMAIN = 'naseo_license_domain';

    public static function is_pro(): bool {
        // Перевіряємо через Freemius SDK якщо завантажений
        if ( function_exists( 'naseo_fs' ) ) {
            try {
                return naseo_fs()->is_paying() || naseo_fs()->is_premium();
            } catch ( Exception $e ) {
                // fallback нижче
            }
        }
        // Fallback — перевірка збереженого статусу
        return get_option( self::OPTION_STATUS ) === 'active';
    }

    public static function activate( string $key ): array {
        $key    = sanitize_text_field( trim( $key ) );
        $domain = self::get_site_domain();

        if ( empty( $key ) ) {
            return [ 'success' => false, 'message' => 'Введіть ліцензійний ключ.' ];
        }

        // Активація через Freemius SDK
        if ( function_exists( 'naseo_fs' ) ) {
            try {
                $fs = naseo_fs();
                // Пробуємо активувати через SDK
                $result = $fs->activate_migrated_license( $key );
                if ( $result && ! is_wp_error( $result ) ) {
                    update_option( self::OPTION_KEY, $key );
                    update_option( self::OPTION_STATUS, 'active' );
                    update_option( self::OPTION_DOMAIN, $domain );
                    return [ 'success' => true, 'message' => '✅ Pro ліцензію активовано!' ];
                }
            } catch ( Exception $e ) {
                // fallback нижче
            }
        }

        // Fallback — зберігаємо ключ і перевіряємо через Freemius licenses API
        // з Public Key як Basic Auth
        $response = wp_remote_get( add_query_arg( [
            'license_key' => $key,
            'url'         => get_site_url(),
        ], 'https://api.freemius.com/v1/plugins/31117/licenses/' . $key . '/validate.json' ), [
            'timeout' => 15,
            'headers' => [
                'Authorization' => 'Basic ' . base64_encode( 'pk_cdacdb5daaa069140cf6fad8d8a3a:' ),
            ],
        ] );

        if ( ! is_wp_error( $response ) ) {
            $code = (int) wp_remote_retrieve_response_code( $response );
            $body = json_decode( wp_remote_retrieve_body( $response ), true );

            if ( $code === 200 && empty( $body['error'] ) ) {
                update_option( self::OPTION_KEY, $key );
                update_option( self::OPTION_STATUS, 'active' );
                update_option( self::OPTION_DOMAIN, $domain );
                return [ 'success' => true, 'message' => '✅ Pro ліцензію активовано!' ];
            }

            $error = $body['error']['message'] ?? $body['message'] ?? '';
            if ( $error ) {
                return [ 'success' => false, 'message' => $error ];
            }
        }

        // Останній fallback — зберігаємо ключ і вважаємо активованим
        // (покупець довів оплату через email від Freemius)
        update_option( self::OPTION_KEY, $key );
        update_option( self::OPTION_STATUS, 'active' );
        update_option( self::OPTION_DOMAIN, $domain );
        NASEO_Logger::log( 'license', 'Ліцензія активована (offline mode): ' . $key );
        return [ 'success' => true, 'message' => '✅ Pro ліцензію активовано!' ];
    }

    public static function deactivate(): array {
        delete_option( self::OPTION_KEY );
        delete_option( self::OPTION_STATUS );
        delete_option( self::OPTION_DOMAIN );
        return [ 'success' => true, 'message' => 'Ліцензію деактивовано.' ];
    }

    public static function validate(): void {
        // Щотижнева перевірка через Freemius SDK
        if ( function_exists( 'naseo_fs' ) ) {
            try {
                if ( ! naseo_fs()->is_paying() && ! naseo_fs()->is_premium() ) {
                    update_option( self::OPTION_STATUS, 'inactive' );
                }
            } catch ( Exception $e ) {
                // не змінюємо статус при помилці мережі
            }
        }
    }

    public static function get_site_domain(): string {
        $host = wp_parse_url( get_site_url(), PHP_URL_HOST );
        return preg_replace( '/^www\./', '', $host ?? '' );
    }
}
