<?php
/**
 * 1MZ For Artists — API Bootstrap (versão 1.6.27.2)
 *
 * Histórico:
 *   1.6.0  — auth + perfil + carteira
 *   1.6.1  — Guarda-Costas
 *   1.6.2  — releases read-only
 *   1.6.3  — releases editar/submeter/takedown
 *   1.6.4  — releases criar com uploads
 *   1.6.5  — notificações in-app
 *   1.6.6  — push notifications (FCM)
 *   1.6.7  — endpoint para revogar device específico
 *   1.6.8  — fix: notificações dispensadas reaparecem
 *   1.6.9  — endpoints de estatísticas/analytics
 *  1.6.10  — endpoints de referrals/convites
 *  1.6.11  — endpoints de configuração de plataformas/territórios
 *  1.6.12  — fix exclusives objecto vs array
 *  1.6.13  — upload com progresso real + mensagens HTTP claras
 *  1.6.14  — songwriters por faixa
 *  1.6.15  — subscrições + planos VIP + criar depósito + first-deposit gate
 *  1.6.16  — links DSP por release (Spotify, Apple Music, etc.)
 *  1.6.17  — perfis do artista nas DSPs (8 plataformas com regex de validação)
 *  1.6.18  — saldo USD em royalties + transferência USD→MT
 *  1.6.19  — pedidos de alteração de lojas para releases LIVE
 *  1.6.20  — splits de royalties (colaboradores) por faixa
 *  1.6.21  — licenciamento musical SOMAS
 *  1.6.22  — suporte: contactos + FAQ
 *  1.6.23  — landing pública /r/{id} + endpoint share-info (pre-save / share)
 *  1.6.24  — origin stamping nas conversões USD→MT (Guarda-Costas)
 *  1.6.25  — anti-downgrade nas subscrições
 *  1.6.26  — submissões (Publicação Site / Redes Sociais) + correcções
 *  1.6.27  — projectos / videoclipes (Ganhar Vídeo)
 *  1.6.27.2 — paridade total com fluxo do site: novos campos no detalhe
 *             (real_name, payment_choice, kyc_rejection_reason,
 *             contract_rejected_reason, allow_self_fund, script_url,
 *             script_content) + endpoint POST /projects/{id}/reject-contract.
 *
 * @package 1MZ_For_Artists
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

if ( ! defined( 'RMBZ_API_NAMESPACE' ) ) {
    define( 'RMBZ_API_NAMESPACE', '1mz/v1' );
}
if ( ! defined( 'RMBZ_API_ACCESS_TOKEN_TTL' ) ) {
    define( 'RMBZ_API_ACCESS_TOKEN_TTL', 3600 );
}
if ( ! defined( 'RMBZ_API_REFRESH_TOKEN_TTL' ) ) {
    define( 'RMBZ_API_REFRESH_TOKEN_TTL', 30 * 86400 );
}

// ─── INFRAESTRUTURA ─────────────────────────────────────────────────────
require_once __DIR__ . '/api-jwt.php';
require_once __DIR__ . '/api-helpers.php';
require_once __DIR__ . '/api-middleware.php';

// ─── IA (1.5.281) — cliente Claude partilhado pelos controllers ──────────
require_once __DIR__ . '/ai/ai-client.php';

// ─── ORIGEM (1.6.1) ─────────────────────────────────────────────────────
require_once __DIR__ . '/origin-schema.php';
require_once __DIR__ . '/origin-helpers.php';
require_once __DIR__ . '/origin-tracker.php';

// ─── ORIGEM EM CONVERSÕES USD→MT (1.6.24) ──────────────────────────────
require_once __DIR__ . '/conversion-origin.php';

// ─── FCM (1.6.6) ────────────────────────────────────────────────────────
require_once __DIR__ . '/fcm/fcm-schema.php';
require_once __DIR__ . '/fcm/fcm-sender.php';
require_once __DIR__ . '/fcm/fcm-auto-push.php';
require_once __DIR__ . '/fcm/admin-push.php'; // [1.5.396] Push para admins (app 1MZ Admin)
if ( is_admin() ) {
	require_once __DIR__ . '/fcm/fcm-diagnostics.php'; // [1.6.341] Diagnóstico push
}

// ─── LANDING PÚBLICA (1.6.23) ─ não é REST, é página web pública ────────
require_once dirname( __DIR__ ) . '/distribution/release-landing.php';

// ─── CONTROLLERS ────────────────────────────────────────────────────────
require_once __DIR__ . '/controllers/auth-controller.php';
require_once __DIR__ . '/controllers/auth-devices-extra.php';
require_once __DIR__ . '/controllers/profile-controller.php';
require_once __DIR__ . '/controllers/wallet-controller.php';
require_once __DIR__ . '/controllers/releases-controller.php';
require_once __DIR__ . '/controllers/releases-dsp-links.php';
require_once __DIR__ . '/controllers/uploads-controller.php';
require_once __DIR__ . '/controllers/notifications-controller.php';
require_once __DIR__ . '/controllers/push-controller.php';
require_once __DIR__ . '/controllers/stats-controller.php';
require_once __DIR__ . '/controllers/referral-controller.php';
require_once __DIR__ . '/controllers/platforms-controller.php';
require_once __DIR__ . '/controllers/subscription-controller.php';
require_once __DIR__ . '/controllers/dsp-profiles-controller.php';
require_once __DIR__ . '/controllers/royalties-controller.php';
require_once __DIR__ . '/controllers/store-changes-controller.php';
require_once __DIR__ . '/controllers/splits-controller.php';
require_once __DIR__ . '/controllers/licensing-controller.php';
require_once __DIR__ . '/controllers/support-controller.php';
require_once __DIR__ . '/controllers/share-controller.php';          // [NOVO 1.6.23]
require_once __DIR__ . '/controllers/submissions-controller.php';   // [NOVO 1.6.26]
require_once __DIR__ . '/controllers/projects-controller.php';      // [NOVO 1.6.27]
require_once __DIR__ . '/controllers/notification-prefs-controller.php'; // [NOVO 1.6.37]
require_once __DIR__ . '/controllers/history-controller.php';            // [NOVO 1.6.54]
require_once __DIR__ . '/controllers/milestones-controller.php';         // [NOVO 1.6.55]
require_once __DIR__ . '/controllers/collaborations-controller.php';     // [NOVO 1.6.56]
require_once __DIR__ . '/controllers/onboarding-controller.php';         // [1.5.198] estava em falta — endpoint POST /onboarding/complete
require_once __DIR__ . '/controllers/coupons-controller.php';            // [1.5.204] endpoint POST /coupons/apply
require_once __DIR__ . '/controllers/app-version-controller.php';        // [1.5.211] GET /app/version-check (público)
require_once __DIR__ . '/controllers/next-payout-controller.php';        // [FEAT 1.6.29] GET /artist/next-payout (projecção)
require_once __DIR__ . '/controllers/announcements-controller.php';      // [FEAT 1.6.116] Avisos globais no app
require_once __DIR__ . '/controllers/cancel-notices-controller.php';     // [1.6.118.116] Avisos de projecto cancelado
require_once __DIR__ . '/controllers/contentid-controller.php';          // [FEAT 1.6.117] Pedidos Content ID YouTube
require_once __DIR__ . '/controllers/system-policies-controller.php';    // [FEAT 1.6.118.4] GET /system/policies (público)
require_once __DIR__ . '/controllers/ai-insights-controller.php';        // [FEAT 1.5.280] GET /me/insights — Assistente do Artista
require_once __DIR__ . '/controllers/ai-tools-controller.php';           // [FEAT 1.5.283] POST /me/ai/caption + /me/ai/ask (VIP)
require_once __DIR__ . '/controllers/admin-app-controller.php';          // App separada 1MZ Admin

// ─── CHAT LIVE (1.6.40 / 1.5.197) ────────────────────────────────────────
// FIX 1.5.192: estes dois ficheiros existiam mas nunca eram carregados,
// pelo que os endpoints REST /1mz/v1/admin-chat/* e /1mz/v1/artist-chat/*
// retornavam 404 (rest_no_route). Resultado: app não lia nem enviava
// mensagens no chat live, e UI nova do admin não funcionava.
//
// `admin/project-chat.php` define os helpers partilhados (rmbz_pchat_get_messages,
// rmbz_pchat_insert_message, rmbz_pchat_get_artist_can_attach,
// rmbz_pchat_handle_upload) usados também pelo artist-chat.php. Tem de
// vir antes.
require_once dirname( __DIR__ ) . '/admin/project-chat.php';
require_once __DIR__ . '/artist-chat.php';
