<?php
/**
 * 1MZ For Artists — Support Endpoints
 *
 * Expõe os contactos de suporte (WhatsApp + email) e a lista de FAQ
 * para a app. NÃO há sistema de tickets — é tudo via WhatsApp/email
 * directo. A app constrói links wa.me / mailto: para abrir as apps
 * nativas com mensagem pré-preenchida.
 *
 * Os contactos vêm de wp_options (configuráveis pelo admin):
 *   - rmbz_support_whatsapp  (formato: 258841234567 ou +258841234567)
 *   - rmbz_support_email
 *
 * O FAQ é definido no servidor — assim podemos actualizar respostas
 * sem precisar de releases novas da app.
 *
 * ENDPOINTS:
 *   GET /support/contacts  — { whatsapp, whatsapp_url, email, app_version_min }
 *   GET /support/faq       — lista de perguntas/respostas + categorias
 *
 * @package 1MZ_For_Artists
 * @since 1.6.22
 */

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

if ( ! defined( 'RMBZ_API_SUPPORT_VERSION' ) ) {
    define( 'RMBZ_API_SUPPORT_VERSION', '1.6.22.1' );
}

add_action( 'rest_api_init', 'rmbz_api_register_support_routes' );

function rmbz_api_register_support_routes() {
    register_rest_route( RMBZ_API_NAMESPACE, '/support/contacts', [
        'methods'             => 'GET',
        'callback'            => 'rmbz_api_handle_support_contacts',
        'permission_callback' => 'rmbz_api_require_auth',
    ] );

    register_rest_route( RMBZ_API_NAMESPACE, '/support/faq', [
        'methods'             => 'GET',
        'callback'            => 'rmbz_api_handle_support_faq',
        'permission_callback' => 'rmbz_api_require_auth',
    ] );
}


/* ============================================================================
 * GET /support/contacts
 *
 * Devolve os meios de contacto. A app usa estes valores para construir
 * `wa.me/{numero}?text={mensagem}` e `mailto:{email}?subject=...`.
 *
 * O número é normalizado para o formato internacional sem '+' nem espaços
 * (formato esperado pelo wa.me).
 * ============================================================================ */
function rmbz_api_handle_support_contacts( WP_REST_Request $request ) {
    $whatsapp_raw = (string) get_option( 'rmbz_support_whatsapp', '' );
    $email_raw    = (string) get_option( 'rmbz_support_email', '' );

    // Normalizar WhatsApp: tirar '+', espaços, traços, parênteses
    $whatsapp = preg_replace( '/[^0-9]/', '', $whatsapp_raw );
    if ( $whatsapp === '' ) {
        $whatsapp = null;
    }

    // wa.me precisa do número internacional sem '+'. Se vazio, omitir URL.
    $whatsapp_url = $whatsapp ? 'https://wa.me/' . $whatsapp : null;

    // Email — validar formato básico
    $email = is_email( $email_raw ) ? $email_raw : null;

    return rmbz_api_ok( [
        '_api_version'    => RMBZ_API_SUPPORT_VERSION,
        'whatsapp'        => $whatsapp,         // só dígitos, ex: "258841234567"
        'whatsapp_url'    => $whatsapp_url,     // pronto a abrir
        'whatsapp_display' => $whatsapp_raw ?: null, // como o admin escreveu
        'email'           => $email,
        'hours_text'      => 'Segunda a sexta, 9:00 às 17:00 (hora de Maputo)',
    ] );
}


/* ============================================================================
 * GET /support/faq
 *
 * Lista de perguntas frequentes agrupadas por categoria.
 *
 * Estrutura definida no código (não admin) — actualizar requer libertar
 * uma versão nova do plugin, mas evita um painel admin extra. Trade-off
 * aceitável para o tamanho da equipa.
 * ============================================================================ */
function rmbz_api_handle_support_faq( WP_REST_Request $request ) {
    $items = rmbz_support_faq_items();

    // Construir lista única de categorias (na ordem de aparecimento)
    $categories = [];
    foreach ( $items as $i ) {
        $key = $i['category'];
        if ( ! isset( $categories[ $key ] ) ) {
            $categories[ $key ] = [
                'slug'  => $key,
                'label' => $i['category_label'],
            ];
        }
    }

    return rmbz_api_ok( [
        '_api_version' => RMBZ_API_SUPPORT_VERSION,
        'categories'   => array_values( $categories ),
        'items'        => $items,
    ] );
}

/**
 * [1.6.311] Itens do FAQ — extraídos para função reutilizável, para o
 * Assistente de IA também os conhecer (não só o endpoint /support/faq).
 */
function rmbz_support_faq_items() {
    return [
        // ----- CARTEIRA -----
        [
            'category' => 'wallet',
            'category_label' => 'Carteira & Pagamentos',
            'question' => 'Como faço um depósito na minha carteira?',
            'answer'   => 'Vai à secção "Carteira" e toca em "Depositar". '
                . 'Podes pagar via M-Pesa ou e-Mola directamente da app — '
                . 'o saldo é creditado automaticamente em segundos depois '
                . 'de confirmares no telefone.',
        ],
        [
            'category' => 'wallet',
            'category_label' => 'Carteira & Pagamentos',
            'question' => 'Como faço um levantamento (withdrawal)?',
            'answer'   => 'Na "Carteira" toca em "Levantar". Escolhes o valor '
                . 'e o número M-Pesa ou e-Mola para receber. O dinheiro chega '
                . 'em poucos minutos. Vais precisar do teu PIN para confirmar.',
        ],
        [
            'category' => 'wallet',
            'category_label' => 'Carteira & Pagamentos',
            'question' => 'Tenho saldo em USD nos royalties — como uso?',
            'answer'   => 'O saldo USD aparece na "Carteira". Para usares, toca '
                . 'em "Levantar" e escolhe a fonte "Royalties USD" — a app '
                . 'converte automaticamente para MT à taxa actual e o '
                . 'levantamento segue normalmente.',
        ],

        // ----- RELEASES -----
        [
            'category' => 'releases',
            'category_label' => 'Lançar Música',
            'question' => 'Quanto tempo demora a minha música ir live?',
            'answer'   => 'Após submeteres, o admin revê em 1-3 dias úteis. '
                . 'Se aprovado, é distribuído para as plataformas (Spotify, '
                . 'Apple Music, etc.) e fica disponível em 5-10 dias úteis '
                . 'consoante a DSP — a Spotify costuma ser mais rápida.',
        ],
        [
            'category' => 'releases',
            'category_label' => 'Lançar Música',
            'question' => 'Posso editar uma faixa depois de submeter?',
            'answer'   => 'Sim, enquanto estiver em "rascunho" ou "incompleta" — '
                . 'toca na faixa no detalhe do release para editar. Após o '
                . 'release ir live, alterações tens de pedir alteração via '
                . 'admin (botão "Pedir alteração de lojas" no detalhe).',
        ],

        // ----- SPLITS -----
        [
            'category' => 'splits',
            'category_label' => 'Splits & Colaboradores',
            'question' => 'O que são splits de royalties?',
            'answer'   => 'Splits são percentagens dos royalties que vão para '
                . 'colaboradores (produtor, featuring, etc.). No detalhe do '
                . 'release toca em "Splits de royalties" para configurar por '
                . 'faixa. O resto fica automaticamente para ti.',
        ],
        [
            'category' => 'splits',
            'category_label' => 'Splits & Colaboradores',
            'question' => 'Adicionei um colaborador mas ele não tem conta 1MZ — funciona?',
            'answer'   => 'Sim. O valor que lhe corresponde fica retido (estado '
                . '"external_hold") e quando ele se registar com o telemóvel '
                . 'que indicaste, recebe automaticamente todos os valores '
                . 'acumulados na carteira.',
        ],

        // ----- SOMAS -----
        [
            'category' => 'somas',
            'category_label' => 'Licenciamento SOMAS',
            'question' => 'O que é a SOMAS e preciso mesmo de me registar?',
            'answer'   => 'A SOMAS (Sociedade Moçambicana de Autores) recolhe '
                . 'direitos de execução pública (rádios, TVs, eventos) em '
                . 'Moçambique. Sem registo, não recebes esses direitos. '
                . 'A 1MZ trata de tudo por ti — vai a "Licenciamento musical".',
        ],
        [
            'category' => 'somas',
            'category_label' => 'Licenciamento SOMAS',
            'question' => 'Já sou membro da SOMAS — preciso registar de novo?',
            'answer'   => 'Não. No wizard de registo escolhe "Já sou membro" — '
                . 'só tens de confirmar dados básicos e anexar o teu '
                . 'comprovante SOMAS. É grátis.',
        ],

        // ----- VIP -----
        [
            'category' => 'vip',
            'category_label' => 'Plano VIP',
            'question' => 'O que ganho com o plano VIP?',
            'answer'   => 'Com VIP podes distribuir música ilimitada, aceder '
                . 'a todas as DSPs, e ferramentas extras (estatísticas, '
                . 'melhor suporte, perfis verificados). Vê os benefícios '
                . 'completos em "Subscrição".',
        ],

        // ----- ASSISTENTE DE IA -----
        [
            'category' => 'ai',
            'category_label' => 'Assistente de IA',
            'question' => 'O que é o Assistente de IA e como o activo?',
            'answer'   => 'É um conjunto de ferramentas inteligentes: Insights, '
                . 'Coach diário, "Detalhes com IA" sobre cada relatório, gerar '
                . 'legendas, kit de divulgação, plano de lançamento e conceito '
                . 'de videoclipe. Para o activar, compra ou renova uma '
                . 'subscrição e escolhe a opção "Assistente de IA" no checkout.',
        ],
        [
            'category' => 'ai',
            'category_label' => 'Assistente de IA',
            'question' => 'Apareceu "atingiste o limite diário desta ferramenta". Porquê?',
            'answer'   => 'Cada ferramenta de IA tem um limite por dia (para '
                . 'controlar custos). O limite reinicia sozinho a cada 24h. Se '
                . 'precisares mesmo de usar já, fala com o suporte para reiniciarem.',
        ],
        [
            'category' => 'ai',
            'category_label' => 'Assistente de IA',
            'question' => 'A IA fala-me de dinheiro — usa o saldo da minha carteira?',
            'answer'   => 'Não. A IA analisa os teus GANHOS das plataformas (os '
                . 'royalties em USD dos relatórios). O saldo da carteira é o teu '
                . 'dinheiro para pagar serviços (vídeo, subscrição) e não entra '
                . 'na análise de receita da música.',
        ],

        // ----- GANHAR VÍDEO -----
        [
            'category' => 'video',
            'category_label' => 'Ganhar Vídeo',
            'question' => 'Como funciona o "Ganhar Vídeo"?',
            'answer'   => 'Candidatas uma música e escolhes o cenário (Básico, '
                . 'Profissional ou Cinema). A equipa avalia; se for aprovada, '
                . 'recebes um orçamento detalhado e, ao aceitares, a 1MZ produz '
                . 'o teu videoclipe. Nota: a música candidata não pode já ter '
                . 'um videoclipe oficial.',
        ],
        [
            'category' => 'video',
            'category_label' => 'Ganhar Vídeo',
            'question' => 'Quanto custa o videoclipe?',
            'answer'   => 'Depende do cenário escolhido. Só sabes o valor exacto '
                . 'depois da aprovação, quando recebes o orçamento. Podes pagar '
                . 'pela carteira e há modos de pagamento flexíveis combinados '
                . 'com a equipa.',
        ],

        // ----- SUBMISSÕES -----
        [
            'category' => 'submissions',
            'category_label' => 'Submissões (Site & Redes)',
            'question' => 'Qual a diferença entre "Publicar no Site" e "Redes Sociais"?',
            'answer'   => '"Publicar no Site" coloca a tua música no portal '
                . '1MusicMoz. "Redes Sociais" divulga os teus vídeos nos canais '
                . 'oficiais da 1MZ (Facebook/YouTube). Ambos se enviam na tab '
                . '"Submissões".',
        ],

        // ----- SEGURANÇA & CONTA -----
        [
            'category' => 'security',
            'category_label' => 'Segurança & Conta',
            'question' => 'Esqueci-me do meu PIN. Como recupero?',
            'answer'   => 'No ecrã de login usa "Recuperar PIN". É gerada uma '
                . 'chave de recuperação que envias ao suporte por WhatsApp; '
                . 'depois de confirmarem, podes definir um novo PIN.',
        ],
        [
            'category' => 'security',
            'category_label' => 'Segurança & Conta',
            'question' => 'Posso entrar com impressão digital em vez do PIN?',
            'answer'   => 'Sim. Activa o desbloqueio biométrico nas definições de '
                . 'segurança da app. Depois entras com a impressão digital ou '
                . 'rosto, sem escrever o PIN.',
        ],

        // ----- CONVITES -----
        [
            'category' => 'referrals',
            'category_label' => 'Convites',
            'question' => 'Como ganho dinheiro a convidar amigos?',
            'answer'   => 'Na secção de convites tens o teu código/link. Quando '
                . 'um amigo se regista com o teu número como "Convidado por" e '
                . 'cumpre as condições, recebes a comissão automaticamente na '
                . 'carteira.',
        ],
    ];
}
