{"id":9,"date":"2025-12-01T18:39:51","date_gmt":"2025-12-01T18:39:51","guid":{"rendered":"https:\/\/reserva.envionacional.com.br\/?page_id=9"},"modified":"2025-12-17T01:58:52","modified_gmt":"2025-12-17T01:58:52","slug":"reserva","status":"publish","type":"page","link":"https:\/\/reserva.envionacional.com.br\/","title":{"rendered":"reserva"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"9\" class=\"elementor elementor-9\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5e7ad44 e-flex e-con-boxed e-con e-parent\" data-id=\"5e7ad44\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4d372ee elementor-widget elementor-widget-html\" data-id=\"4d372ee\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t            <!DOCTYPE html>\r\n            <html lang=\"pt-BR\">\r\n            <head>\r\n                <meta charset=\"UTF-8\">\r\n                <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n                <title>Compra Garantida Envio Nacional<\/title>\r\n                <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/appwrite@14.0.1\"><\/script>\r\n                <style>\r\n                    * {\r\n                        margin: 0;\r\n                        padding: 0;\r\n                        box-sizing: border-box;\r\n                    }\r\n\r\n                    :root {\r\n                        --primary-color: #6d28d9;\r\n                        --secondary-color: #2563eb;\r\n                        --success-color: #10b981;\r\n                        --danger-color: #ef4444;\r\n                        --warning-color: #f59e0b;\r\n                        --bg-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\r\n                        --card-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);\r\n                    }\r\n\r\n                    body {\r\n                        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\r\n                        background: var(--bg-gradient);\r\n                        min-height: 100vh;\r\n                        display: flex;\r\n                        align-items: center;\r\n                        justify-content: center;\r\n                        padding: 20px;\r\n                    }\r\n\r\n                    .container {\r\n                        width: 100%;\r\n                        max-width: 1400px;\r\n                        background: white;\r\n                        border-radius: 20px;\r\n                        box-shadow: var(--card-shadow);\r\n                        overflow: hidden;\r\n                        animation: fadeInUp 0.6s ease;\r\n                    }\r\n\r\n                    @keyframes fadeInUp {\r\n                        from {\r\n                            opacity: 0;\r\n                            transform: translateY(30px);\r\n                        }\r\n                        to {\r\n                            opacity: 1;\r\n                            transform: translateY(0);\r\n                        }\r\n                    }\r\n\r\n                    \/* Auth Styles *\/\r\n                    .auth-container {\r\n                        max-width: 450px;\r\n                        margin: 50px auto;\r\n                        padding: 40px;\r\n                    }\r\n\r\n                    .auth-header {\r\n                        text-align: center;\r\n                        margin-bottom: 30px;\r\n                    }\r\n\r\n                    .auth-header h1 {\r\n                        color: var(--primary-color);\r\n                        font-size: 28px;\r\n                        margin-bottom: 10px;\r\n                    }\r\n\r\n                    .auth-header p {\r\n                        color: #6b7280;\r\n                        font-size: 14px;\r\n                    }\r\n\r\n                    .auth-form {\r\n                        display: flex;\r\n                        flex-direction: column;\r\n                        gap: 20px;\r\n                    }\r\n\r\n                    .form-group {\r\n                        display: flex;\r\n                        flex-direction: column;\r\n                        gap: 8px;\r\n                    }\r\n\r\n                    .form-group label {\r\n                        color: #374151;\r\n                        font-weight: 600;\r\n                        font-size: 14px;\r\n                    }\r\n\r\n                    .form-group input,\r\n                    .form-group select,\r\n                    .form-group textarea {\r\n                        padding: 12px 16px;\r\n                        border: 2px solid #e5e7eb;\r\n                        border-radius: 8px;\r\n                        font-size: 14px;\r\n                        transition: all 0.3s;\r\n                    }\r\n\r\n                    .form-group input:focus,\r\n                    .form-group select:focus,\r\n                    .form-group textarea:focus {\r\n                        outline: none;\r\n                        border-color: var(--primary-color);\r\n                        box-shadow: 0 0 0 3px rgba(109, 40, 217, 0.1);\r\n                    }\r\n\r\n                    .btn {\r\n                        padding: 12px 24px;\r\n                        border: none;\r\n                        border-radius: 8px;\r\n                        font-size: 14px;\r\n                        font-weight: 600;\r\n                        cursor: pointer;\r\n                        transition: all 0.3s;\r\n                        text-align: center;\r\n                    }\r\n\r\n                    .btn-primary {\r\n                        background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));\r\n                        color: white;\r\n                    }\r\n\r\n                    .btn-primary:hover {\r\n                        transform: translateY(-2px);\r\n                        box-shadow: 0 5px 15px rgba(109, 40, 217, 0.3);\r\n                    }\r\n\r\n                    .btn-secondary {\r\n                        background: #f3f4f6;\r\n                        color: #374151;\r\n                    }\r\n\r\n                    .btn-secondary:hover {\r\n                        background: #e5e7eb;\r\n                    }\r\n\r\n                    .btn-success {\r\n                        background: var(--success-color);\r\n                        color: white;\r\n                    }\r\n\r\n                    .btn-danger {\r\n                        background: var(--danger-color);\r\n                        color: white;\r\n                    }\r\n\r\n                    .btn-danger:hover {\r\n                        background: #dc2626;\r\n                        transform: translateY(-1px);\r\n                        box-shadow: 0 4px 12px rgba(220, 38, 38, 0.3);\r\n                    }\r\n\r\n                    .btn-warning {\r\n                        background: var(--warning-color);\r\n                        color: white;\r\n                    }\r\n\r\n                    .btn-warning:hover {\r\n                        background: #d97706;\r\n                        transform: translateY(-1px);\r\n                        box-shadow: 0 4px 12px rgba(217, 119, 6, 0.3);\r\n                    }\r\n\r\n                    .btn-small {\r\n                        padding: 6px 12px;\r\n                        font-size: 12px;\r\n                    }\r\n\r\n                    .toggle-form {\r\n                        text-align: center;\r\n                        margin-top: 20px;\r\n                        color: #6b7280;\r\n                        font-size: 14px;\r\n                    }\r\n\r\n                    .toggle-form a {\r\n                        color: var(--primary-color);\r\n                        text-decoration: none;\r\n                        font-weight: 600;\r\n                        cursor: pointer;\r\n                    }\r\n\r\n                    .toggle-form a:hover {\r\n                        text-decoration: underline;\r\n                    }\r\n\r\n                    .admin-credentials {\r\n                        background: #fef3c7;\r\n                        border: 2px solid #fbbf24;\r\n                        border-radius: 8px;\r\n                        padding: 15px;\r\n                        margin-top: 20px;\r\n                    }\r\n\r\n                    .admin-credentials h3 {\r\n                        color: #92400e;\r\n                        font-size: 14px;\r\n                        margin-bottom: 8px;\r\n                    }\r\n\r\n                    .admin-credentials p {\r\n                        color: #78350f;\r\n                        font-size: 13px;\r\n                        margin: 4px 0;\r\n                    }\r\n\r\n                    \/* Dashboard Styles *\/\r\n                    .dashboard-container {\r\n                        display: none;\r\n                    }\r\n\r\n                    .dashboard-header {\r\n                        background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));\r\n                        color: white;\r\n                        padding: 20px 30px;\r\n                        display: flex;\r\n                        justify-content: space-between;\r\n                        align-items: center;\r\n                    }\r\n\r\n                    .dashboard-header h1 {\r\n                        font-size: 24px;\r\n                    }\r\n\r\n                    .user-info {\r\n                        display: flex;\r\n                        align-items: center;\r\n                        gap: 15px;\r\n                    }\r\n\r\n                    .dashboard-tabs {\r\n                        display: flex;\r\n                        background: #f9fafb;\r\n                        border-bottom: 2px solid #e5e7eb;\r\n                        overflow-x: auto;\r\n                    }\r\n\r\n                    .tab {\r\n                        padding: 15px 25px;\r\n                        background: none;\r\n                        border: none;\r\n                        cursor: pointer;\r\n                        font-size: 14px;\r\n                        font-weight: 600;\r\n                        color: #6b7280;\r\n                        border-bottom: 3px solid transparent;\r\n                        transition: all 0.3s;\r\n                        white-space: nowrap;\r\n                    }\r\n\r\n                    .tab:hover {\r\n                        color: var(--primary-color);\r\n                        background: white;\r\n                    }\r\n\r\n                    .tab.active {\r\n                        color: var(--primary-color);\r\n                        border-bottom-color: var(--primary-color);\r\n                        background: white;\r\n                    }\r\n\r\n                    .dashboard-content {\r\n                        padding: 30px;\r\n                        min-height: 500px;\r\n                    }\r\n\r\n                    .tab-content {\r\n                        display: none;\r\n                        animation: fadeIn 0.3s ease;\r\n                    }\r\n\r\n                    .tab-content.active {\r\n                        display: block;\r\n                    }\r\n\r\n                    @keyframes fadeIn {\r\n                        from {\r\n                            opacity: 0;\r\n                        }\r\n                        to {\r\n                            opacity: 1;\r\n                        }\r\n                    }\r\n\r\n                    .search-container {\r\n                        margin-bottom: 20px;\r\n                    }\r\n\r\n                    .search-container input {\r\n                        width: 100%;\r\n                        max-width: 400px;\r\n                        padding: 12px 16px;\r\n                        border: 2px solid #e5e7eb;\r\n                        border-radius: 8px;\r\n                        font-size: 14px;\r\n                    }\r\n\r\n                    .products-grid {\r\n                        display: grid;\r\n                        grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\r\n                        gap: 20px;\r\n                        margin-top: 20px;\r\n                    }\r\n\r\n                    .product-card {\r\n                        background: white;\r\n                        border: 2px solid #e5e7eb;\r\n                        border-radius: 12px;\r\n                        overflow: hidden;\r\n                        transition: all 0.3s;\r\n                    }\r\n\r\n                    .product-card:hover {\r\n                        transform: translateY(-5px);\r\n                        box-shadow: var(--card-shadow);\r\n                        border-color: var(--primary-color);\r\n                    }\r\n\r\n                    .product-image {\r\n                        width: 100%;\r\n                        height: 200px;\r\n                        object-fit: cover;\r\n                    }\r\n\r\n                    .product-info {\r\n                        padding: 15px;\r\n                    }\r\n\r\n                    .product-name {\r\n                        font-size: 16px;\r\n                        font-weight: 600;\r\n                        color: #111827;\r\n                        margin-bottom: 8px;\r\n                    }\r\n\r\n                    .product-description {\r\n                        font-size: 13px;\r\n                        color: #6b7280;\r\n                        margin-bottom: 10px;\r\n                    }\r\n\r\n                    .product-price {\r\n                        font-size: 18px;\r\n                        font-weight: 700;\r\n                        color: var(--primary-color);\r\n                        margin-bottom: 10px;\r\n                    }\r\n\r\n                    .product-stock {\r\n                        font-size: 13px;\r\n                        color: #6b7280;\r\n                        margin-bottom: 15px;\r\n                    }\r\n\r\n                    .table-container {\r\n                        overflow-x: auto;\r\n                        margin-top: 20px;\r\n                    }\r\n\r\n                    table {\r\n                        width: 100%;\r\n                        border-collapse: collapse;\r\n                        background: white;\r\n                        border-radius: 8px;\r\n                        overflow: hidden;\r\n                    }\r\n\r\n                    thead {\r\n                        background: #f9fafb;\r\n                    }\r\n\r\n                    th {\r\n                        padding: 12px;\r\n                        text-align: left;\r\n                        font-weight: 600;\r\n                        color: #374151;\r\n                        font-size: 14px;\r\n                        border-bottom: 2px solid #e5e7eb;\r\n                    }\r\n\r\n                    td {\r\n                        padding: 12px;\r\n                        border-bottom: 1px solid #e5e7eb;\r\n                        font-size: 14px;\r\n                        color: #6b7280;\r\n                    }\r\n\r\n                    .badge {\r\n                        padding: 4px 12px;\r\n                        border-radius: 12px;\r\n                        font-size: 12px;\r\n                        font-weight: 600;\r\n                        display: inline-block;\r\n                    }\r\n\r\n                    .badge-pendente {\r\n                        background: #fef3c7;\r\n                        color: #92400e;\r\n                    }\r\n\r\n                    .badge-aprovada {\r\n                        background: #d1fae5;\r\n                        color: #065f46;\r\n                    }\r\n\r\n                    .badge-rejeitada {\r\n                        background: #fee2e2;\r\n                        color: #991b1b;\r\n                    }\r\n\r\n                    .badge-enviado {\r\n                        background: #dbeafe;\r\n                        color: #1e40af;\r\n                    }\r\n\r\n                    \/* Modal Styles *\/\r\n                    .modal {\r\n                        display: none;\r\n                        position: fixed;\r\n                        top: 0;\r\n                        left: 0;\r\n                        width: 100%;\r\n                        height: 100%;\r\n                        background: rgba(0, 0, 0, 0.5);\r\n                        z-index: 1000;\r\n                        align-items: center;\r\n                        justify-content: center;\r\n                    }\r\n\r\n                    .modal.active {\r\n                        display: flex;\r\n                    }\r\n\r\n                    .modal-content {\r\n                        background: white;\r\n                        border-radius: 12px;\r\n                        padding: 30px;\r\n                        max-width: 500px;\r\n                        width: 90%;\r\n                        max-height: 90vh;\r\n                        overflow-y: auto;\r\n                        animation: scaleIn 0.3s ease;\r\n                    }\r\n\r\n                    @keyframes scaleIn {\r\n                        from {\r\n                            transform: scale(0.9);\r\n                            opacity: 0;\r\n                        }\r\n                        to {\r\n                            transform: scale(1);\r\n                            opacity: 1;\r\n                        }\r\n                    }\r\n\r\n                    .modal-header {\r\n                        margin-bottom: 20px;\r\n                    }\r\n\r\n                    .modal-header h2 {\r\n                        color: #111827;\r\n                        font-size: 20px;\r\n                    }\r\n\r\n                    .modal-footer {\r\n                        display: flex;\r\n                        gap: 10px;\r\n                        margin-top: 20px;\r\n                        justify-content: flex-end;\r\n                    }\r\n\r\n                    .alert {\r\n                        padding: 12px 16px;\r\n                        border-radius: 8px;\r\n                        margin-bottom: 20px;\r\n                        font-size: 14px;\r\n                    }\r\n\r\n                    .alert-success {\r\n                        background: #d1fae5;\r\n                        color: #065f46;\r\n                        border: 1px solid #10b981;\r\n                    }\r\n\r\n                    .alert-danger {\r\n                        background: #fee2e2;\r\n                        color: #991b1b;\r\n                        border: 1px solid #ef4444;\r\n                    }\r\n\r\n                    .alert-warning {\r\n                        background: #fef3c7;\r\n                        color: #92400e;\r\n                        border: 1px solid #f59e0b;\r\n                    }\r\n\r\n                    .low-stock {\r\n                        background: #fef3c7;\r\n                        border-left: 4px solid #f59e0b;\r\n                        padding: 10px;\r\n                        margin-bottom: 10px;\r\n                        border-radius: 4px;\r\n                    }\r\n\r\n                    .import-info {\r\n                        background: #dbeafe;\r\n                        border: 1px solid #3b82f6;\r\n                        border-radius: 8px;\r\n                        padding: 15px;\r\n                        margin-bottom: 20px;\r\n                        font-size: 13px;\r\n                        color: #1e40af;\r\n                    }\r\n\r\n                    .import-info h4 {\r\n                        margin-bottom: 8px;\r\n                        color: #1e3a8a;\r\n                    }\r\n\r\n                    .import-info code {\r\n                        background: #1e3a8a;\r\n                        color: white;\r\n                        padding: 2px 6px;\r\n                        border-radius: 4px;\r\n                        font-family: monospace;\r\n                    }\r\n\r\n                    .hidden {\r\n                        display: none;\r\n                    }\r\n\r\n                    \/* =============================================== *\/\r\n                    \/* RESPONSIVIDADE COMPLETA PARA SMARTPHONE *\/\r\n                    \/* =============================================== *\/\r\n                    \r\n                    @media (max-width: 768px) {\r\n                        body {\r\n                            padding: 0;\r\n                            align-items: flex-start;\r\n                        }\r\n\r\n                        .container {\r\n                            border-radius: 0;\r\n                            min-height: 100vh;\r\n                        }\r\n\r\n                        \/* Auth Section *\/\r\n                        .auth-container {\r\n                            padding: 20px;\r\n                            margin: 20px auto;\r\n                        }\r\n\r\n                        .auth-header h1 {\r\n                            font-size: 22px;\r\n                        }\r\n\r\n                        \/* Dashboard Header *\/\r\n                        .dashboard-header {\r\n                            flex-direction: column;\r\n                            gap: 15px;\r\n                            padding: 15px;\r\n                        }\r\n\r\n                        .dashboard-header h1 {\r\n                            font-size: 20px;\r\n                        }\r\n\r\n                        .user-info {\r\n                            width: 100%;\r\n                            justify-content: space-between;\r\n                            flex-wrap: wrap;\r\n                            gap: 10px;\r\n                        }\r\n\r\n                        \/* Contador de usu\u00e1rios online *\/\r\n                        .dashboard-header > div:first-child {\r\n                            flex-direction: column;\r\n                            align-items: flex-start !important;\r\n                            gap: 10px !important;\r\n                        }\r\n\r\n                        \/* Badges de contador - responsivo *\/\r\n                        .dashboard-header > div:first-child > div {\r\n                            font-size: 12px !important;\r\n                            padding: 6px 12px !important;\r\n                            width: 100%;\r\n                            justify-content: center;\r\n                        }\r\n\r\n                        .dashboard-header > div:first-child > div span {\r\n                            font-size: 16px !important;\r\n                        }\r\n\r\n                        .dashboard-header > div:first-child > div span:last-child {\r\n                            font-size: 11px !important;\r\n                        }\r\n\r\n                        \/* Tabs *\/\r\n                        .dashboard-tabs {\r\n                            flex-wrap: wrap;\r\n                            overflow-x: auto;\r\n                            gap: 5px;\r\n                            padding: 10px;\r\n                            -webkit-overflow-scrolling: touch;\r\n                        }\r\n\r\n                        .tab {\r\n                            padding: 10px 12px;\r\n                            font-size: 12px;\r\n                            white-space: nowrap;\r\n                            flex-shrink: 0;\r\n                        }\r\n\r\n                        \/* Dashboard Content *\/\r\n                        .dashboard-content {\r\n                            padding: 15px;\r\n                        }\r\n\r\n                        \/* Products Grid *\/\r\n                        .products-grid {\r\n                            grid-template-columns: 1fr;\r\n                            gap: 15px;\r\n                        }\r\n\r\n                        .product-card {\r\n                            padding: 15px;\r\n                        }\r\n\r\n                        .product-card img {\r\n                            height: 200px;\r\n                        }\r\n\r\n                        .product-card h3 {\r\n                            font-size: 16px;\r\n                        }\r\n\r\n                        .product-card .product-price {\r\n                            font-size: 18px;\r\n                        }\r\n\r\n                        \/* Tables *\/\r\n                        .table-container {\r\n                            overflow-x: auto;\r\n                            -webkit-overflow-scrolling: touch;\r\n                        }\r\n\r\n                        table {\r\n                            font-size: 11px;\r\n                            min-width: 600px;\r\n                        }\r\n\r\n                        th, td {\r\n                            padding: 6px 4px;\r\n                        }\r\n\r\n                        \/* Purchase Cards *\/\r\n                        .purchase-card {\r\n                            padding: 15px;\r\n                        }\r\n\r\n                        .purchase-card img {\r\n                            height: 150px;\r\n                        }\r\n\r\n                        \/* Buttons *\/\r\n                        .btn {\r\n                            padding: 10px 16px;\r\n                            font-size: 13px;\r\n                        }\r\n\r\n                        .btn-small {\r\n                            padding: 6px 10px;\r\n                            font-size: 11px;\r\n                        }\r\n\r\n                        \/* Forms *\/\r\n                        .form-group input,\r\n                        .form-group select,\r\n                        .form-group textarea {\r\n                            font-size: 14px;\r\n                            padding: 10px 14px;\r\n                        }\r\n\r\n                        \/* Modal *\/\r\n                        .modal-content {\r\n                            width: 95%;\r\n                            max-width: 95%;\r\n                            max-height: 95vh;\r\n                            margin: 2.5vh auto;\r\n                            padding: 20px;\r\n                        }\r\n\r\n                        .modal-header h2 {\r\n                            font-size: 18px;\r\n                        }\r\n\r\n                        .modal-body {\r\n                            padding: 15px 0;\r\n                        }\r\n\r\n                        \/* Search *\/\r\n                        .search-container {\r\n                            margin-bottom: 15px;\r\n                        }\r\n\r\n                        .search-container input {\r\n                            font-size: 14px;\r\n                            padding: 10px 14px;\r\n                        }\r\n\r\n                        \/* Cards com informa\u00e7\u00f5es *\/\r\n                        .purchase-card > div,\r\n                        .product-card > div {\r\n                            padding: 0 10px;\r\n                        }\r\n\r\n                        \/* Grids de informa\u00e7\u00e3o *\/\r\n                        [style*=\"grid-template-columns\"] {\r\n                            grid-template-columns: 1fr !important;\r\n                        }\r\n\r\n                        \/* Info boxes (vendedor\/comprador) *\/\r\n                        [style*=\"display: grid; grid-template-columns: 100px\"] {\r\n                            grid-template-columns: 1fr !important;\r\n                            gap: 10px !important;\r\n                        }\r\n\r\n                        \/* Imagens em cards de pedidos *\/\r\n                        [style*=\"grid-template-columns: 100px\"] img {\r\n                            width: 100% !important;\r\n                            height: 200px !important;\r\n                            max-width: 100% !important;\r\n                        }\r\n\r\n                        \/* Estat\u00edsticas e resumos *\/\r\n                        [style*=\"display: grid\"][style*=\"repeat(\"] {\r\n                            grid-template-columns: 1fr 1fr !important;\r\n                            gap: 10px !important;\r\n                        }\r\n\r\n                        \/* Headers com flex *\/\r\n                        [style*=\"display: flex; justify-content: space-between\"] {\r\n                            flex-direction: column !important;\r\n                            align-items: flex-start !important;\r\n                            gap: 10px !important;\r\n                        }\r\n\r\n                        [style*=\"display: flex; gap: 10px\"] button,\r\n                        [style*=\"display: flex; gap: 15px\"] button {\r\n                            width: 100%;\r\n                        }\r\n\r\n                        \/* PIX Section *\/\r\n                        .pix-section {\r\n                            padding: 15px;\r\n                        }\r\n\r\n                        .pix-section img {\r\n                            max-width: 200px;\r\n                        }\r\n\r\n                        .pix-key {\r\n                            font-size: 11px;\r\n                            padding: 10px;\r\n                            word-break: break-all;\r\n                        }\r\n\r\n                        \/* Admin Credentials *\/\r\n                        .admin-credentials {\r\n                            padding: 15px;\r\n                        }\r\n\r\n                        \/* Alerts *\/\r\n                        .alert {\r\n                            padding: 12px;\r\n                            font-size: 13px;\r\n                        }\r\n\r\n                        \/* Import Info *\/\r\n                        .import-info {\r\n                            padding: 12px;\r\n                            font-size: 12px;\r\n                        }\r\n\r\n                        \/* Status badges *\/\r\n                        .status-pendente,\r\n                        .status-aprovada,\r\n                        .status-rejeitada,\r\n                        .status-enviado {\r\n                            font-size: 11px;\r\n                            padding: 4px 8px;\r\n                        }\r\n\r\n                        \/* Profile section *\/\r\n                        #perfilTab .form-group {\r\n                            margin-bottom: 15px;\r\n                        }\r\n\r\n                        \/* T\u00edtulos de se\u00e7\u00e3o *\/\r\n                        h2 {\r\n                            font-size: 20px;\r\n                        }\r\n\r\n                        h3 {\r\n                            font-size: 16px;\r\n                        }\r\n\r\n                        h4 {\r\n                            font-size: 14px;\r\n                        }\r\n\r\n                        \/* Ajustes de padding e margin gerais *\/\r\n                        .dashboard-container {\r\n                            padding: 0;\r\n                        }\r\n\r\n                        \/* Contador online - ajuste espec\u00edfico *\/\r\n                        #onlineUsersCount {\r\n                            font-size: 16px;\r\n                        }\r\n\r\n                        \/* Fix para cards de retorno *\/\r\n                        [style*=\"border-left: 4px solid\"] {\r\n                            border-left-width: 3px;\r\n                        }\r\n\r\n                        \/* Ajuste para textos longos *\/\r\n                        p, span, div {\r\n                            word-wrap: break-word;\r\n                            overflow-wrap: break-word;\r\n                        }\r\n\r\n                        \/* Footer de modais *\/\r\n                        .modal-footer {\r\n                            flex-direction: column;\r\n                            gap: 10px;\r\n                        }\r\n\r\n                        .modal-footer button {\r\n                            width: 100%;\r\n                        }\r\n\r\n                        \/* Ajuste para cards inline *\/\r\n                        [style*=\"display: inline-block\"] {\r\n                            display: block !important;\r\n                            width: 100% !important;\r\n                        }\r\n\r\n                        \/* Upload de arquivos *\/\r\n                        input[type=\"file\"] {\r\n                            font-size: 12px;\r\n                            padding: 8px;\r\n                        }\r\n\r\n                        \/* Textarea *\/\r\n                        textarea {\r\n                            min-height: 100px;\r\n                        }\r\n                    }\r\n\r\n                    \/* Tablets (768px - 1024px) *\/\r\n                    @media (min-width: 769px) and (max-width: 1024px) {\r\n                        .products-grid {\r\n                            grid-template-columns: repeat(2, 1fr);\r\n                        }\r\n\r\n                        .dashboard-tabs {\r\n                            flex-wrap: wrap;\r\n                        }\r\n\r\n                        .tab {\r\n                            font-size: 13px;\r\n                            padding: 10px 14px;\r\n                        }\r\n                    }\r\n\r\n                    \/* Small smartphones (max 375px) *\/\r\n                    @media (max-width: 375px) {\r\n                        .auth-container {\r\n                            padding: 15px;\r\n                        }\r\n\r\n                        .dashboard-header h1 {\r\n                            font-size: 18px;\r\n                        }\r\n\r\n                        .tab {\r\n                            font-size: 11px;\r\n                            padding: 8px 10px;\r\n                        }\r\n\r\n                        .btn {\r\n                            font-size: 12px;\r\n                            padding: 8px 12px;\r\n                        }\r\n\r\n                        table {\r\n                            font-size: 10px;\r\n                        }\r\n\r\n                        .product-card h3 {\r\n                            font-size: 14px;\r\n                        }\r\n\r\n                        .product-card .product-price {\r\n                            font-size: 16px;\r\n                        }\r\n                    }\r\n\r\n                    \/* Landscape mode para smartphones *\/\r\n                    @media (max-height: 500px) and (orientation: landscape) {\r\n                        .modal-content {\r\n                            max-height: 90vh;\r\n                            overflow-y: auto;\r\n                        }\r\n\r\n                        .dashboard-header {\r\n                            padding: 10px;\r\n                        }\r\n\r\n                        .tab {\r\n                            padding: 8px 12px;\r\n                        }\r\n                    }\r\n\r\n                    \/* =============================================== *\/\r\n                    \/* FIM DA RESPONSIVIDADE *\/\r\n                    \/* =============================================== *\/\r\n\r\n                    \/* Alertas de Estoque *\/\r\n                    .alerts-container {\r\n                        margin-bottom: 20px;\r\n                    }\r\n\r\n                    .alert {\r\n                        padding: 15px;\r\n                        border-radius: 8px;\r\n                        margin-bottom: 15px;\r\n                    }\r\n\r\n                    .alert-warning {\r\n                        background-color: #fef3c7;\r\n                        border-left: 4px solid #f59e0b;\r\n                        color: #92400e;\r\n                    }\r\n\r\n                    .alert-danger {\r\n                        background-color: #fee2e2;\r\n                        border-left: 4px solid #ef4444;\r\n                        color: #991b1b;\r\n                    }\r\n\r\n                    .alert strong {\r\n                        display: block;\r\n                        margin-bottom: 8px;\r\n                        font-size: 16px;\r\n                    }\r\n\r\n                    .alert ul {\r\n                        margin: 8px 0 0 20px;\r\n                        padding: 0;\r\n                    }\r\n\r\n                    .alert li {\r\n                        margin: 4px 0;\r\n                    }\r\n\r\n                    .pix-section {\r\n                        background: #f0f9ff;\r\n                        padding: 15px;\r\n                        border-radius: 8px;\r\n                        margin: 15px 0;\r\n                    }\r\n\r\n                    .pix-section h3 {\r\n                        margin-top: 0;\r\n                        color: #0369a1;\r\n                    }\r\n                <\/style>\r\n            <\/head>\r\n            <body>\r\n                <div class=\"container\">\r\n                    <!-- Auth Section -->\r\n                    <div id=\"authSection\" class=\"auth-container\">\r\n                        <div class=\"auth-header\">\r\n                            <h1>\ud83d\uded2 Compra Garantida<\/h1>\r\n                            <p>Envio Nacional - Seu marketplace seguro<\/p>\r\n                        <\/div>\r\n\r\n                        <!-- Login Form -->\r\n                        <form id=\"loginForm\" class=\"auth-form\">\r\n                            <div class=\"form-group\">\r\n                                <label for=\"loginEmail\">Email<\/label>\r\n                                <input type=\"email\" id=\"loginEmail\" required placeholder=\"seu@email.com\">\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"loginPassword\">Senha<\/label>\r\n                                <input type=\"password\" id=\"loginPassword\" required placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\">\r\n                            <\/div>\r\n                            <button type=\"submit\" class=\"btn btn-primary\">Entrar<\/button>\r\n                            <div class=\"toggle-form\">\r\n                                N\u00e3o tem conta? <a onclick=\"toggleForms()\">Cadastre-se<\/a>\r\n                            <\/div>\r\n                        <\/form>\r\n\r\n                        <!-- Register Form -->\r\n                        <form id=\"registerForm\" class=\"auth-form hidden\">\r\n                            <div class=\"form-group\">\r\n                                <label for=\"registerName\">Nome Completo<\/label>\r\n                                <input type=\"text\" id=\"registerName\" required placeholder=\"Seu nome\">\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"registerEmail\">Email<\/label>\r\n                                <input type=\"email\" id=\"registerEmail\" required placeholder=\"seu@email.com\">\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"registerPassword\">Senha<\/label>\r\n                                <input type=\"password\" id=\"registerPassword\" required placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\">\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"registerPhone\">Telefone<\/label>\r\n                                <input type=\"tel\" id=\"registerPhone\" required placeholder=\"(00) 00000-0000\">\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"registerAddress\">Endere\u00e7o Completo<\/label>\r\n                                <textarea id=\"registerAddress\" required placeholder=\"Rua, n\u00famero, bairro, cidade, estado\"><\/textarea>\r\n                            <\/div>\r\n                            <button type=\"submit\" class=\"btn btn-primary\">Cadastrar<\/button>\r\n                            <div class=\"toggle-form\">\r\n                                J\u00e1 tem conta? <a onclick=\"toggleForms()\">Fa\u00e7a login<\/a>\r\n                            <\/div>\r\n                        <\/form>\r\n                    <\/div>\r\n\r\n                    <!-- User Dashboard -->\r\n                    <div id=\"userDashboard\" class=\"dashboard-container\">\r\n                        <div class=\"dashboard-header\">\r\n                            <h1>\ud83d\uded2 Painel do Usu\u00e1rio<\/h1>\r\n                            <div class=\"user-info\">\r\n                                <span id=\"userName\">Usu\u00e1rio<\/span>\r\n                                <button class=\"btn btn-secondary\" onclick=\"logout()\">Sair<\/button>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <div class=\"dashboard-tabs\">\r\n                            <button class=\"tab active\" onclick=\"switchTab('catalogo', event)\">\ud83d\udce6 Cat\u00e1logo<\/button>\r\n                            <button class=\"tab\" onclick=\"switchTab('compras', event)\">\ud83d\udecd\ufe0f Minhas Compras<\/button>\r\n                            <button class=\"tab\" onclick=\"switchTab('vendidos', event)\">\ud83d\udcb0 Pedidos Vendidos<\/button>\r\n                            <button class=\"tab\" onclick=\"switchTab('meus-retornos', event)\">\u21a9\ufe0f Minhas Solicita\u00e7\u00f5es<\/button>\r\n                            <button class=\"tab\" onclick=\"switchTab('perfil', event)\">\ud83d\udc64 Meu Perfil<\/button>\r\n                        <\/div>\r\n\r\n                        <div class=\"dashboard-content\">\r\n                            <!-- Cat\u00e1logo Tab -->\r\n                            <div id=\"catalogoTab\" class=\"tab-content active\">\r\n                                <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;\">\r\n                                    <h2 style=\"margin: 0;\">Cat\u00e1logo de Produtos<\/h2>\r\n                                    <button class=\"btn btn-secondary\" onclick=\"clearCacheAndSync()\" style=\"font-size: 12px; padding: 8px 16px;\">\ud83d\udd04 Atualizar<\/button>\r\n                                <\/div>\r\n                                <div class=\"search-container\">\r\n                                    <input type=\"text\" id=\"searchProduct\" placeholder=\"\ud83d\udd0d Pesquisar produto...\" oninput=\"filterProducts()\">\r\n                                <\/div>\r\n                                <div id=\"productsList\" class=\"products-grid\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Minhas Compras Tab -->\r\n                            <div id=\"comprasTab\" class=\"tab-content\">\r\n                                <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;\">\r\n                                    <h2 style=\"margin: 0;\">Minhas Compras<\/h2>\r\n                                    <button class=\"btn btn-secondary\" onclick=\"clearCacheAndSync()\" style=\"font-size: 12px; padding: 8px 16px;\">\ud83d\udd04 Atualizar<\/button>\r\n                                <\/div>\r\n                                <div id=\"purchasesList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Pedidos Vendidos Tab -->\r\n                            <div id=\"vendidosTab\" class=\"tab-content\">\r\n                                <h2>Pedidos Vendidos<\/h2>\r\n                                <div id=\"salesList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Minhas Solicita\u00e7\u00f5es de Retorno Tab -->\r\n                            <div id=\"meus-retornosTab\" class=\"tab-content\">\r\n                                <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;\">\r\n                                    <h2 style=\"margin: 0;\">Minhas Solicita\u00e7\u00f5es de Retorno<\/h2>\r\n                                    <button class=\"btn btn-secondary\" onclick=\"clearCacheAndSync()\" style=\"font-size: 12px; padding: 8px 16px;\">\ud83d\udd04 Atualizar<\/button>\r\n                                <\/div>\r\n                                <div id=\"myReturnsList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Meu Perfil Tab -->\r\n                            <div id=\"perfilTab\" class=\"tab-content\">\r\n                                <div style=\"max-width: 600px; margin: 0 auto;\">\r\n                                    <h2 style=\"margin-bottom: 20px;\">\ud83d\udc64 Meu Perfil<\/h2>\r\n                                    \r\n                                    <div style=\"background: #eff6ff; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid #3b82f6;\">\r\n                                        <p style=\"margin: 0; color: #1e40af; font-weight: 500;\">\r\n                                            \u2139\ufe0f Mantenha seus dados atualizados para facilitar a comunica\u00e7\u00e3o.\r\n                                        <\/p>\r\n                                    <\/div>\r\n\r\n                                    <form id=\"profileForm\" style=\"background: white; padding: 30px; border-radius: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\">\r\n                                        <div style=\"display: grid; gap: 20px;\">\r\n                                            <!-- Nome Completo -->\r\n                                            <div>\r\n                                                <label style=\"display: block; margin-bottom: 8px; font-weight: 600; color: #374151;\">\ud83d\udc64 Nome Completo *<\/label>\r\n                                                <input type=\"text\" id=\"profileName\" required\r\n                                                    style=\"width: 100%; padding: 12px; border: 2px solid #e5e7eb; border-radius: 8px; font-size: 14px;\"\r\n                                                    placeholder=\"Digite seu nome completo\">\r\n                                            <\/div>\r\n\r\n                                            <!-- Email -->\r\n                                            <div>\r\n                                                <label style=\"display: block; margin-bottom: 8px; font-weight: 600; color: #374151;\">\ud83d\udce7 Email *<\/label>\r\n                                                <input type=\"email\" id=\"profileEmail\" required readonly\r\n                                                    style=\"width: 100%; padding: 12px; border: 2px solid #e5e7eb; border-radius: 8px; font-size: 14px; background: #f9fafb; cursor: not-allowed;\"\r\n                                                    placeholder=\"email@exemplo.com\">\r\n                                                <small style=\"color: #6b7280; font-size: 12px;\">Email n\u00e3o pode ser alterado<\/small>\r\n                                            <\/div>\r\n\r\n                                            <!-- Telefone -->\r\n                                            <div>\r\n                                                <label style=\"display: block; margin-bottom: 8px; font-weight: 600; color: #374151;\">\ud83d\udcf1 Telefone\/WhatsApp *<\/label>\r\n                                                <input type=\"tel\" id=\"profilePhone\" required\r\n                                                    style=\"width: 100%; padding: 12px; border: 2px solid #e5e7eb; border-radius: 8px; font-size: 14px;\"\r\n                                                    placeholder=\"(00) 00000-0000\">\r\n                                            <\/div>\r\n\r\n                                            <!-- Bot\u00f5es -->\r\n                                            <div style=\"display: flex; gap: 10px; margin-top: 10px;\">\r\n                                                <button type=\"submit\" class=\"btn btn-primary\" style=\"flex: 1;\">\r\n                                                    \ud83d\udcbe Salvar Perfil\r\n                                                <\/button>\r\n                                                <button type=\"button\" onclick=\"loadUserProfile()\" class=\"btn btn-secondary\">\r\n                                                    \ud83d\udd04 Recarregar\r\n                                                <\/button>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    <\/form>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <!-- Admin Dashboard -->\r\n                    <div id=\"adminDashboard\" class=\"dashboard-container\">\r\n                        <div class=\"dashboard-header\">\r\n                            <div style=\"display: flex; align-items: center; gap: 15px; flex-wrap: wrap;\">\r\n                                <h1>\ud83d\udc68\u200d\ud83d\udcbc Painel Administrativo<\/h1>\r\n                                <div style=\"background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%); color: white; padding: 8px 16px; border-radius: 20px; font-weight: 600; font-size: 14px; box-shadow: 0 2px 8px rgba(245, 158, 11, 0.3); display: flex; align-items: center; gap: 8px;\">\r\n                                    <span style=\"font-size: 18px;\">\u23f3<\/span>\r\n                                    <span id=\"pendingShipmentsCount\">0<\/span>\r\n                                    <span style=\"font-size: 12px; opacity: 0.9;\">em aberto<\/span>\r\n                                <\/div>\r\n                                <div style=\"background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%); color: white; padding: 8px 16px; border-radius: 20px; font-weight: 600; font-size: 14px; box-shadow: 0 2px 8px rgba(59, 130, 246, 0.3); display: flex; align-items: center; gap: 8px;\">\r\n                                    <span style=\"font-size: 18px;\">\ud83d\udce6<\/span>\r\n                                    <span id=\"shippedTodayCount\">0<\/span>\r\n                                    <span style=\"font-size: 12px; opacity: 0.9;\">enviados hoje<\/span>\r\n                                <\/div>\r\n                                <div style=\"background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%); color: white; padding: 8px 16px; border-radius: 20px; font-weight: 600; font-size: 14px; box-shadow: 0 2px 8px rgba(139, 92, 246, 0.3); display: flex; align-items: center; gap: 8px;\">\r\n                                    <span style=\"font-size: 18px;\">\u2705<\/span>\r\n                                    <span id=\"pendingApprovalsCount\">0<\/span>\r\n                                    <span style=\"font-size: 12px; opacity: 0.9;\">aprova\u00e7\u00f5es pendentes<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class=\"user-info\">\r\n                                <span id=\"adminName\">Admin<\/span>\r\n                                <button class=\"btn btn-secondary\" onclick=\"logout()\">Sair<\/button>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <!-- Cards de Estat\u00edsticas -->\r\n                        <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 15px; margin: 20px 0;\">\r\n                            <!-- Total de Vendas -->\r\n                            <div style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 20px; border-radius: 12px; box-shadow: 0 4px 12px rgba(102,126,234,0.3);\">\r\n                                <div style=\"color: rgba(255,255,255,0.9); font-size: 13px; font-weight: 500; margin-bottom: 8px;\">\ud83d\udcb0 Total de Vendas<\/div>\r\n                                <div style=\"color: white; font-size: 32px; font-weight: 700; margin-bottom: 8px;\" id=\"totalVendas\">-<\/div>\r\n                                <div style=\"color: rgba(255,255,255,0.8); font-size: 12px;\">vendas realizadas<\/div>\r\n                            <\/div>\r\n                            \r\n                            <!-- Produtos Vendidos -->\r\n                            <div style=\"background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); padding: 20px; border-radius: 12px; box-shadow: 0 4px 12px rgba(245,87,108,0.3);\">\r\n                                <div style=\"color: rgba(255,255,255,0.9); font-size: 13px; font-weight: 500; margin-bottom: 8px;\">\ud83d\udce6 Produtos Vendidos<\/div>\r\n                                <div style=\"color: white; font-size: 32px; font-weight: 700; margin-bottom: 8px;\" id=\"totalProdutosVendidos\">-<\/div>\r\n                                <div style=\"color: rgba(255,255,255,0.8); font-size: 12px;\">unidades totais<\/div>\r\n                            <\/div>\r\n                            \r\n                            <!-- Vendas Pendentes -->\r\n                            <div style=\"background: linear-gradient(135deg, #ffa751 0%, #ffe259 100%); padding: 20px; border-radius: 12px; box-shadow: 0 4px 12px rgba(255,167,81,0.3);\">\r\n                                <div style=\"color: rgba(0,0,0,0.7); font-size: 13px; font-weight: 500; margin-bottom: 8px;\">\u23f3 Aguardando Envio<\/div>\r\n                                <div style=\"color: #92400e; font-size: 32px; font-weight: 700; margin-bottom: 8px;\" id=\"totalVendasPendentes\">-<\/div>\r\n                                <div style=\"color: rgba(0,0,0,0.6); font-size: 12px;\">vendas pendentes<\/div>\r\n                            <\/div>\r\n                            \r\n                            <!-- Vendas Enviadas -->\r\n                            <div style=\"background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); padding: 20px; border-radius: 12px; box-shadow: 0 4px 12px rgba(79,172,254,0.3);\">\r\n                                <div style=\"color: rgba(255,255,255,0.9); font-size: 13px; font-weight: 500; margin-bottom: 8px;\">\u2705 Vendas Enviadas<\/div>\r\n                                <div style=\"color: white; font-size: 32px; font-weight: 700; margin-bottom: 8px;\" id=\"totalVendasEnviadas\">-<\/div>\r\n                                <div style=\"color: rgba(255,255,255,0.8); font-size: 12px;\">pedidos conclu\u00eddos<\/div>\r\n                            <\/div>\r\n                            \r\n                            <!-- Total de Compras -->\r\n                            <div style=\"background: linear-gradient(135deg, #fa709a 0%, #fee140 100%); padding: 20px; border-radius: 12px; box-shadow: 0 4px 12px rgba(250,112,154,0.3);\">\r\n                                <div style=\"color: rgba(0,0,0,0.7); font-size: 13px; font-weight: 500; margin-bottom: 8px;\">\ud83d\uded2 Total de Compras<\/div>\r\n                                <div style=\"color: #831843; font-size: 32px; font-weight: 700; margin-bottom: 8px;\" id=\"totalCompras\">-<\/div>\r\n                                <div style=\"color: rgba(0,0,0,0.6); font-size: 12px;\">compras registradas<\/div>\r\n                            <\/div>\r\n                            \r\n                            <!-- Compras Aprovadas -->\r\n                            <div style=\"background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); padding: 20px; border-radius: 12px; box-shadow: 0 4px 12px rgba(168,237,234,0.3);\">\r\n                                <div style=\"color: rgba(0,0,0,0.7); font-size: 13px; font-weight: 500; margin-bottom: 8px;\">\u2714\ufe0f Compras Aprovadas<\/div>\r\n                                <div style=\"color: #065f46; font-size: 32px; font-weight: 700; margin-bottom: 8px;\" id=\"totalComprasAprovadas\">-<\/div>\r\n                                <div style=\"color: rgba(0,0,0,0.6); font-size: 12px;\">aprova\u00e7\u00f5es conclu\u00eddas<\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <!-- Bot\u00f5es de Admin -->\r\n                        <div style=\"padding: 15px; background: #fef3c7; border-radius: 8px; margin: 15px 0;\">\r\n                            <div style=\"margin-bottom: 10px;\">\r\n                                <button onclick=\"forceUploadAllSalesToAppwrite().then(count => { if(count > 0) location.reload(); })\" class=\"btn btn-success\" style=\"width: 100%; font-weight: 600; font-size: 15px; padding: 12px;\">\r\n                                    \ud83d\ude80 ENVIAR TODAS AS VENDAS PARA APPWRITE\r\n                                <\/button>\r\n                                <p style=\"margin: 8px 0 0 0; font-size: 12px; color: #78350f; text-align: center;\">\r\n                                    For\u00e7a o envio de todas as vendas do navegador para o banco de dados\r\n                                <\/p>\r\n                            <\/div>\r\n                            \r\n                            <hr style=\"border: none; border-top: 1px solid #fde68a; margin: 15px 0;\">\r\n                            \r\n                            <button onclick=\"debugAppwriteSales()\" class=\"btn btn-secondary\" style=\"width: 100%; margin-bottom: 10px;\">\r\n                                \ud83d\udd0d DEBUG: Verificar Vendas no Appwrite\r\n                            <\/button>\r\n                            <button onclick=\"syncLocalSalesToAppwrite().then(synced => { alert(synced ? 'Vendas sincronizadas! Recarregue a p\u00e1gina.' : 'Todas as vendas j\u00e1 est\u00e3o sincronizadas.'); if(synced) location.reload(); })\" class=\"btn btn-info\" style=\"width: 100%; margin-bottom: 10px;\">\r\n                                \ud83d\udd04 Sincronizar Vendas Locais (Auto)\r\n                            <\/button>\r\n                            <button onclick=\"fixSalesWithoutStatus().then(count => alert(`${count} vendas foram corrigidas! Recarregue a p\u00e1gina.`))\" class=\"btn btn-primary\" style=\"width: 100%;\">\r\n                                \ud83d\udd27 Corrigir Vendas Sem Status\r\n                            <\/button>\r\n                        <\/div>\r\n\r\n                        <div class=\"dashboard-tabs\">\r\n                            <button class=\"tab active\" onclick=\"switchAdminTab('envios', event)\">\ud83d\udcee Envios Pendentes<\/button>\r\n                            <button class=\"tab\" onclick=\"switchAdminTab('aprovacoes', event)\">\u2705 Aprova\u00e7\u00f5es Pendentes<\/button>\r\n                            <button class=\"tab\" onclick=\"switchAdminTab('solicitacoes-retorno', event)\">\u21a9\ufe0f Solicita\u00e7\u00f5es de Retorno<\/button>\r\n                            <button class=\"tab\" onclick=\"switchAdminTab('retornos', event)\">\ud83d\udce6 Retornos Processados<\/button>\r\n                            <button class=\"tab\" onclick=\"switchAdminTab('usuarios', event)\">\ud83d\udc65 Usu\u00e1rios<\/button>\r\n                            <button class=\"tab\" onclick=\"switchAdminTab('produtos', event)\">\ud83d\udce6 Produtos<\/button>\r\n                            <button class=\"tab\" onclick=\"switchAdminTab('enviados', event)\">\ud83d\ude9a Pedidos Enviados<\/button>\r\n                            <button class=\"tab\" onclick=\"switchAdminTab('todas', event)\">\ud83d\udccb Todas as Compras<\/button>\r\n                        <\/div>\r\n\r\n                        <div class=\"dashboard-content\">\r\n                            <!-- Envios Pendentes Tab -->\r\n                            <div id=\"enviosTab\" class=\"tab-content active\">\r\n                                <h2>Envios Pendentes de Aprova\u00e7\u00e3o<\/h2>\r\n                                <div id=\"pendingShipmentsList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Aprova\u00e7\u00f5es Pendentes Tab -->\r\n                            <div id=\"aprovacoesTab\" class=\"tab-content\">\r\n                                <h2>Compras Pendentes de Aprova\u00e7\u00e3o<\/h2>\r\n                                <div id=\"pendingApprovalsList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Solicita\u00e7\u00f5es de Retorno Tab -->\r\n                            <div id=\"solicitacoes-retornoTab\" class=\"tab-content\">\r\n                                <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px;\">\r\n                                    <h2 style=\"margin: 0;\">\u21a9\ufe0f Solicita\u00e7\u00f5es de Retorno Pendentes<\/h2>\r\n                                    <div style=\"display: flex; gap: 10px;\">\r\n                                        <button class=\"btn btn-warning btn-small\" onclick=\"debugReturns()\" style=\"font-size: 12px; padding: 8px 16px;\">\ud83d\udc1b Debug<\/button>\r\n                                        <button class=\"btn btn-secondary\" onclick=\"loadReturnRequests()\">\ud83d\udd04 Atualizar<\/button>\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div style=\"background: #fef3c7; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid #f59e0b;\">\r\n                                    <p style=\"margin: 0; color: #92400e; font-weight: 500;\">\r\n                                        \u2139\ufe0f Aqui voc\u00ea aprova ou rejeita solicita\u00e7\u00f5es de retorno dos clientes. Ao aprovar, a quantidade ser\u00e1 devolvida ao estoque do cliente.\r\n                                    <\/p>\r\n                                <\/div>\r\n                                <div id=\"returnRequestsList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Retornos Processados Tab -->\r\n                            <div id=\"retornosTab\" class=\"tab-content\">\r\n                                <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px;\">\r\n                                    <h2 style=\"margin: 0;\">\ud83d\udce6 Retornos Processados<\/h2>\r\n                                    <button class=\"btn btn-secondary\" onclick=\"loadReturnOrders()\">\ud83d\udd04 Atualizar<\/button>\r\n                                <\/div>\r\n                                <div style=\"background: #fef3c7; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid #f59e0b;\">\r\n                                    <p style=\"margin: 0; color: #92400e; font-weight: 500;\">\r\n                                        \u2139\ufe0f Aqui voc\u00ea pode processar devolu\u00e7\u00f5es de produtos. Ao confirmar o retorno, a quantidade ser\u00e1 adicionada de volta ao estoque do produto.\r\n                                    <\/p>\r\n                                <\/div>\r\n                                <div id=\"returnOrdersList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Usu\u00e1rios Tab -->\r\n                            <div id=\"usuariosTab\" class=\"tab-content\">\r\n                                <h2>Todos os Usu\u00e1rios<\/h2>\r\n                                <div id=\"usersList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Produtos Tab -->\r\n                            <div id=\"produtosTab\" class=\"tab-content\">\r\n                                <h2>Gerenciar Produtos<\/h2>\r\n                                <div style=\"display: flex; gap: 10px; margin-bottom: 20px; flex-wrap: wrap;\">\r\n                                    <button class=\"btn btn-primary\" onclick=\"openAddProductModal()\">+ Adicionar Produto<\/button>\r\n                                    <button class=\"btn btn-secondary\" onclick=\"testProductCreation()\" style=\"background: #7c3aed; font-weight: bold;\">\ud83e\uddea Teste Manual<\/button>\r\n                                    <button class=\"btn btn-secondary\" onclick=\"clearCacheAndSync()\">\ud83d\udd04 Limpar Cache<\/button>\r\n                                    <button class=\"btn btn-secondary\" onclick=\"testAppwriteConnection()\" style=\"background: #dc2626;\">\ud83d\udd27 Testar Conex\u00e3o<\/button>\r\n                                    <button class=\"btn btn-secondary\" onclick=\"verifyProducts()\" style=\"background: #059669;\">\ud83d\udccb Verificar Produtos<\/button>\r\n                                    <button class=\"btn btn-secondary\" onclick=\"deleteAllProducts()\" style=\"background: #dc2626;\">\ud83d\uddd1\ufe0f Deletar Todos<\/button>\r\n                                <\/div>\r\n                                \r\n                                <div style=\"background: #eff6ff; border-left: 4px solid #3b82f6; padding: 15px; margin-bottom: 20px; border-radius: 4px;\">\r\n                                    <strong>\u2139\ufe0f Onde encontrar os produtos:<\/strong><br>\r\n                                    <small style=\"color: #1e40af;\">\r\n                                        Os produtos s\u00e3o salvos em: <strong>Database > Collections > products (692ddb8c001ac2c76694)<\/strong><br>\r\n                                        \u26a0\ufe0f N\u00c3O procure no Storage - Storage \u00e9 apenas para arquivos (imagens)!\r\n                                    <\/small>\r\n                                <\/div>\r\n                                \r\n                                <div class=\"import-info\">\r\n                                    <h4>\ud83d\udcc4 Importar Produtos por Planilha<\/h4>\r\n                                    <p>Formato CSV esperado: <code>nome,preco,descricao,imagem<\/code><\/p>\r\n                                    <p>Exemplo: <code>Produto A,99.90,Descri\u00e7\u00e3o do produto,https:\/\/...<\/code><\/p>\r\n                                    <p style=\"color: #dc2626; font-weight: bold; margin-top: 10px;\">\r\n                                        \u26a0\ufe0f IMPORTANTE: Os produtos ser\u00e3o ADICIONADOS ao banco existente.<br>\r\n                                        Para substituir todos, delete os produtos antigos primeiro!\r\n                                    <\/p>\r\n                                    <button type=\"button\" class=\"btn btn-secondary\" onclick=\"downloadTemplate()\" style=\"margin-top: 10px;\">\u2b07\ufe0f Baixar Modelo CSV<\/button>\r\n                                <\/div>\r\n                                \r\n                                <form id=\"importForm\" style=\"margin-bottom: 20px;\">\r\n                                    <div class=\"form-group\">\r\n                                        <label>Importar Planilha (CSV)<\/label>\r\n                                        <input type=\"file\" id=\"importFile\" accept=\".csv\" required>\r\n                                    <\/div>\r\n                                    <button type=\"submit\" class=\"btn btn-success\">\ud83d\udce5 Importar Produtos<\/button>\r\n                                <\/form>\r\n\r\n                                <div id=\"adminProductsList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Pedidos Enviados Tab -->\r\n                            <div id=\"enviadosTab\" class=\"tab-content\">\r\n                                <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; flex-wrap: wrap; gap: 10px;\">\r\n                                    <h2 style=\"margin: 0;\">Pedidos Enviados<\/h2>\r\n                                    <div style=\"display: flex; gap: 10px; align-items: center; flex-wrap: wrap;\">\r\n                                        <div style=\"display: flex; align-items: center; gap: 8px;\">\r\n                                            <label for=\"shippedOrdersDateFilter\" style=\"font-size: 14px; font-weight: 600; color: #374151;\">\ud83d\udcc5 Filtrar por data:<\/label>\r\n                                            <input type=\"date\" id=\"shippedOrdersDateFilter\" \r\n                                                style=\"padding: 8px 12px; border: 2px solid #d1d5db; border-radius: 6px; font-size: 14px; cursor: pointer;\"\r\n                                                onchange=\"filterShippedOrdersByDate()\">\r\n                                            <button class=\"btn btn-secondary\" onclick=\"clearShippedOrdersDateFilter()\" style=\"font-size: 12px; padding: 8px 12px;\">\ud83d\udd04 Limpar Filtro<\/button>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div id=\"shippedOrdersList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n\r\n                            <!-- Todas as Compras Tab -->\r\n                            <div id=\"todasTab\" class=\"tab-content\">\r\n                                <h2>Todas as Compras<\/h2>\r\n                                <div id=\"allPurchasesList\" class=\"table-container\"><\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Modals -->\r\n                <!-- Reserva Modal -->\r\n                <div id=\"reservaModal\" class=\"modal\">\r\n                    <div class=\"modal-content\">\r\n                        <div class=\"modal-header\">\r\n                            <h2>Reservar Produto<\/h2>\r\n                        <\/div>\r\n                        <form id=\"reservaForm\">\r\n                            <input type=\"hidden\" id=\"reservaProductId\">\r\n                            <div class=\"form-group\">\r\n                                <label>Produto<\/label>\r\n                                <input type=\"text\" id=\"reservaProductName\" readonly>\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label>Pre\u00e7o Unit\u00e1rio<\/label>\r\n                                <input type=\"text\" id=\"reservaProductPrice\" readonly>\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"reservaQuantity\">Quantidade<\/label>\r\n                                <input type=\"number\" id=\"reservaQuantity\" min=\"1\" required>\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label>Total<\/label>\r\n                                <input type=\"text\" id=\"reservaTotal\" readonly>\r\n                            <\/div>\r\n                            \r\n                            <!-- Chave PIX -->\r\n                            <div class=\"pix-section\" style=\"background: #f0f9ff; padding: 20px; border-radius: 12px; margin: 15px 0; border: 2px solid #0ea5e9;\">\r\n                                <h3 style=\"margin-top: 0; color: #0369a1; display: flex; align-items: center; gap: 8px;\">\r\n                                    \ud83d\udcb3 Pagamento via PIX\r\n                                <\/h3>\r\n                                \r\n                                <!-- QR Code -->\r\n                                <div style=\"text-align: center; margin: 15px 0; padding: 15px; background: white; border-radius: 8px;\">\r\n                                    <img decoding=\"async\" src=\"https:\/\/envionacional.com.br\/wp-content\/uploads\/2025\/12\/qr-code.jpeg\" \r\n                                        alt=\"QR Code PIX\" \r\n                                        style=\"max-width: 250px; width: 100%; height: auto; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\"\r\n                                        onerror=\"this.style.display='none'; this.nextElementSibling.style.display='block';\">\r\n                                    <p style=\"display: none; color: #666; font-size: 14px; margin: 10px 0;\">Imagem do QR Code n\u00e3o dispon\u00edvel<\/p>\r\n                                <\/div>\r\n                                \r\n                                <!-- Dados da Empresa -->\r\n                                <div style=\"background: white; padding: 12px; border-radius: 8px; margin: 15px 0; border-left: 4px solid #0ea5e9;\">\r\n                                    <p style=\"margin: 0; font-weight: 600; color: #0369a1; font-size: 15px;\">\ud83c\udfe2 ATEKNOLOGIA SHOP LTDA<\/p>\r\n                                    <p style=\"margin: 5px 0 0 0; color: #666; font-size: 13px;\">Dados do favorecido<\/p>\r\n                                <\/div>\r\n                                \r\n                                <!-- Chave PIX Copia e Cola -->\r\n                                <div style=\"margin: 15px 0;\">\r\n                                    <label style=\"display: block; font-weight: 600; color: #0369a1; margin-bottom: 8px; font-size: 14px;\">\r\n                                        \ud83d\udccb PIX Copia e Cola\r\n                                    <\/label>\r\n                                    <div style=\"display: flex; gap: 10px; align-items: stretch;\">\r\n                                        <textarea \r\n                                            id=\"pixCopiaCola\" \r\n                                            readonly \r\n                                            style=\"flex: 1; background: white; font-family: monospace; font-size: 11px; resize: none; padding: 10px; border: 1px solid #cbd5e1; border-radius: 6px; min-height: 80px; line-height: 1.4;\"\r\n                                        >00020101021126580014br.gov.bcb.pix0136d1d04215-cb68-4bff-a787-acb5f2da2cf15204000053039865802BR5916ATEKNOLOGIA SHOP6013RIO DE JANEIR62070503***63047EA5<\/textarea>\r\n                                        <button type=\"button\" class=\"btn btn-primary\" onclick=\"copyPixKey()\" style=\"white-space: nowrap; padding: 10px 20px; height: auto;\">\r\n                                            \ud83d\udccb Copiar\r\n                                        <\/button>\r\n                                    <\/div>\r\n                                <\/div>\r\n                                \r\n                                <div style=\"background: #fef3c7; padding: 12px; border-radius: 8px; margin-top: 15px; border-left: 4px solid #f59e0b;\">\r\n                                    <p style=\"margin: 0; color: #92400e; font-size: 13px; font-weight: 500;\">\r\n                                        \u26a0\ufe0f Ap\u00f3s realizar o pagamento, anexe o comprovante abaixo\r\n                                    <\/p>\r\n                                <\/div>\r\n                            <\/div>\r\n                            \r\n                            <div class=\"form-group\">\r\n                                <label for=\"reservaReceipt\">Comprovante de Pagamento PIX<\/label>\r\n                                <input type=\"file\" id=\"reservaReceipt\" accept=\".pdf,.jpg,.jpeg,.png,.webp,image\/jpeg,image\/png,image\/webp,application\/pdf\" required>\r\n                                <small style=\"color: #666; font-size: 12px; display: block; margin-top: 5px;\">\r\n                                    Formatos aceitos: PDF, JPEG, PNG, WebP\r\n                                <\/small>\r\n                            <\/div>\r\n                            <div class=\"modal-footer\">\r\n                                <button type=\"button\" class=\"btn btn-secondary\" onclick=\"closeModal('reservaModal')\">Cancelar<\/button>\r\n                                <button type=\"submit\" class=\"btn btn-primary\" onclick=\"console.log('\ud83d\uddb1\ufe0f Bot\u00e3o Confirmar Reserva clicado!')\">Confirmar Reserva<\/button>\r\n                            <\/div>\r\n                        <\/form>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Receipt Modal -->\r\n                <div id=\"receiptModal\" class=\"modal\">\r\n                    <div class=\"modal-content\">\r\n                        <div class=\"modal-header\">\r\n                            <h2>Comprovante de Pagamento<\/h2>\r\n                        <\/div>\r\n                        <div id=\"receiptContent\"><\/div>\r\n                        <div class=\"modal-footer\">\r\n                            <button type=\"button\" class=\"btn btn-secondary\" onclick=\"closeModal('receiptModal')\">Fechar<\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Stock Send Modal -->\r\n                <div id=\"stockSendModal\" class=\"modal\">\r\n                    <div class=\"modal-content\">\r\n                        <div class=\"modal-header\">\r\n                            <h2>Enviar Produtos do Estoque<\/h2>\r\n                        <\/div>\r\n                        <form id=\"stockSendForm\">\r\n                            <input type=\"hidden\" id=\"stockSendId\">\r\n                            <div class=\"form-group\">\r\n                                <label>Produto<\/label>\r\n                                <input type=\"text\" id=\"stockSendProduct\" readonly>\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label>Quantidade Dispon\u00edvel<\/label>\r\n                                <input type=\"text\" id=\"stockSendAvailable\" readonly>\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"stockSendQuantity\">Quantidade a Enviar<\/label>\r\n                                <input type=\"number\" id=\"stockSendQuantity\" min=\"1\" required>\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"stockSendLabel\">Etiqueta de Envio<\/label>\r\n                                <input type=\"file\" id=\"stockSendLabel\" accept=\"image\/*\" required>\r\n                            <\/div>\r\n                            <div class=\"modal-footer\">\r\n                                <button type=\"button\" class=\"btn btn-secondary\" onclick=\"closeModal('stockSendModal')\">Cancelar<\/button>\r\n                                <button type=\"submit\" class=\"btn btn-success\">Enviar para Aprova\u00e7\u00e3o<\/button>\r\n                            <\/div>\r\n                        <\/form>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Label Modal -->\r\n                <div id=\"labelModal\" class=\"modal\">\r\n                    <div class=\"modal-content\">\r\n                        <div class=\"modal-header\">\r\n                            <h2>Etiqueta de Envio<\/h2>\r\n                        <\/div>\r\n                        <div id=\"labelContent\"><\/div>\r\n                        <div class=\"modal-footer\">\r\n                            <button type=\"button\" class=\"btn btn-secondary\" onclick=\"closeModal('labelModal')\">Fechar<\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Send Purchase Modal -->\r\n                <div id=\"sendPurchaseModal\" class=\"modal\">\r\n                    <div class=\"modal-content\">\r\n                        <div class=\"modal-header\">\r\n                            <h2>\ud83d\udce6 Enviar Pedido<\/h2>\r\n                        <\/div>\r\n                        <form id=\"sendPurchaseForm\">\r\n                            <input type=\"hidden\" id=\"sendPurchaseId\">\r\n                            \r\n                            <div class=\"form-group\">\r\n                                <label>Produto<\/label>\r\n                                <input type=\"text\" id=\"sendPurchaseProduct\" readonly style=\"background: #f3f4f6;\">\r\n                            <\/div>\r\n                            \r\n                            <div class=\"form-group\">\r\n                                <label>Quantidade Total Comprada<\/label>\r\n                                <input type=\"number\" id=\"sendPurchaseTotalQty\" readonly style=\"background: #f3f4f6;\">\r\n                            <\/div>\r\n                            \r\n                            <div class=\"form-group\">\r\n                                <label>Quantidade a Enviar *<\/label>\r\n                                <input type=\"number\" id=\"sendPurchaseQuantity\" min=\"1\" required>\r\n                                <small style=\"color: #6b7280;\">Digite quantos itens voc\u00ea vai enviar<\/small>\r\n                            <\/div>\r\n                            \r\n                            <div class=\"form-group\">\r\n                                <label>Etiqueta de Envio (PDF, JPG, PNG) *<\/label>\r\n                                <input type=\"file\" id=\"sendPurchaseLabel\" accept=\".pdf,.jpg,.jpeg,.png,.webp\" required>\r\n                                <small style=\"color: #6b7280;\">Anexe a etiqueta dos Correios ou transportadora<\/small>\r\n                            <\/div>\r\n                            \r\n                            <div style=\"background: #fef3c7; padding: 15px; border-radius: 8px; margin-bottom: 15px;\">\r\n                                <p style=\"margin: 0; font-size: 14px; color: #92400e;\">\r\n                                    \u26a0\ufe0f <strong>Importante:<\/strong> A quantidade enviada ser\u00e1 debitada da sua compra total.\r\n                                <\/p>\r\n                            <\/div>\r\n                            \r\n                            <button type=\"submit\" class=\"btn btn-primary\" style=\"width: 100%;\">\ud83d\udce4 Confirmar Envio<\/button>\r\n                        <\/form>\r\n                        <div class=\"modal-footer\">\r\n                            <button type=\"button\" class=\"btn btn-secondary\" onclick=\"closeModal('sendPurchaseModal')\">Cancelar<\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Add Product Modal -->\r\n                <div id=\"addProductModal\" class=\"modal\">\r\n                    <div class=\"modal-content\">\r\n                        <div class=\"modal-header\">\r\n                            <h2>Adicionar Produto<\/h2>\r\n                        <\/div>\r\n                        <form id=\"addProductForm\">\r\n                            <div class=\"form-group\">\r\n                                <label for=\"productName\">Nome do Produto<\/label>\r\n                                <input type=\"text\" id=\"productName\" required>\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"productDescription\">Descri\u00e7\u00e3o<\/label>\r\n                                <textarea id=\"productDescription\" required><\/textarea>\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"productPrice\">Pre\u00e7o (R$)<\/label>\r\n                                <input type=\"number\" id=\"productPrice\" step=\"0.01\" min=\"0\" required>\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"productImage\">URL da Imagem (opcional)<\/label>\r\n                                <input type=\"url\" id=\"productImage\" placeholder=\"Deixe em branco para usar placeholder padr\u00e3o\">\r\n                            <\/div>\r\n                            <div class=\"form-group\">\r\n                                <label for=\"productStock\">Estoque Inicial<\/label>\r\n                                <input type=\"number\" id=\"productStock\" min=\"0\" value=\"0\">\r\n                            <\/div>\r\n                            <div class=\"modal-footer\">\r\n                                <button type=\"button\" class=\"btn btn-secondary\" onclick=\"closeModal('addProductModal')\">Cancelar<\/button>\r\n                                <button type=\"submit\" class=\"btn btn-primary\" onclick=\"console.log('\ud83d\uddb1\ufe0f Bot\u00e3o Adicionar clicado!')\">Adicionar<\/button>\r\n                            <\/div>\r\n                        <\/form>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Edit Price Modal -->\r\n                <div id=\"editPriceModal\" class=\"modal\">\r\n                    <div class=\"modal-content\">\r\n                        <div class=\"modal-header\">\r\n                            <h2>\u270f\ufe0f Editar Produto<\/h2>\r\n                        <\/div>\r\n                        <form id=\"editPriceForm\">\r\n                            <input type=\"hidden\" id=\"editProductId\">\r\n                            <div class=\"form-group\">\r\n                                <label>Nome do Produto<\/label>\r\n                                <input type=\"text\" id=\"editProductName\" disabled style=\"background: #f3f4f6; color: #6b7280;\">\r\n                            <\/div>\r\n                            <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 15px;\">\r\n                                <div class=\"form-group\">\r\n                                    <label>Pre\u00e7o Atual (R$)<\/label>\r\n                                    <input type=\"text\" id=\"editProductCurrentPrice\" disabled style=\"background: #f3f4f6; color: #6b7280; font-weight: bold;\">\r\n                                <\/div>\r\n                                <div class=\"form-group\">\r\n                                    <label>Estoque Atual<\/label>\r\n                                    <input type=\"text\" id=\"editProductCurrentStock\" disabled style=\"background: #f3f4f6; color: #6b7280; font-weight: bold;\">\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 15px;\">\r\n                                <div class=\"form-group\">\r\n                                    <label>Novo Pre\u00e7o (R$)<\/label>\r\n                                    <input type=\"number\" id=\"editProductNewPrice\" step=\"0.01\" min=\"0\" required placeholder=\"Digite o novo pre\u00e7o\" style=\"font-size: 18px; font-weight: bold; color: #059669;\">\r\n                                <\/div>\r\n                                <div class=\"form-group\">\r\n                                    <label>Novo Estoque<\/label>\r\n                                    <input type=\"number\" id=\"editProductNewStock\" min=\"0\" required placeholder=\"Digite o estoque\" style=\"font-size: 18px; font-weight: bold; color: #2563eb;\">\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class=\"modal-footer\">\r\n                                <button type=\"button\" class=\"btn btn-secondary\" onclick=\"closeModal('editPriceModal')\">Cancelar<\/button>\r\n                                <button type=\"submit\" class=\"btn btn-primary\">\ud83d\udcbe Salvar Altera\u00e7\u00f5es<\/button>\r\n                            <\/div>\r\n                        <\/form>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Edit Product Modal -->\r\n                <div id=\"editProductModal\" class=\"modal\">\r\n                    <div class=\"modal-content\" style=\"max-width: 700px;\">\r\n                        <div class=\"modal-header\">\r\n                            <h2>\u270f\ufe0f Editar Produto<\/h2>\r\n                        <\/div>\r\n                        <form id=\"editProductForm\">\r\n                            <input type=\"hidden\" id=\"editProdId\">\r\n                            \r\n                            <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 15px;\">\r\n                                <div class=\"form-group\" style=\"grid-column: 1 \/ -1;\">\r\n                                    <label>Imagem Atual<\/label>\r\n                                    <div style=\"text-align: center; margin-bottom: 10px;\">\r\n                                        <img decoding=\"async\" id=\"editProdCurrentImage\" src=\"\" alt=\"Produto\" style=\"max-width: 200px; max-height: 200px; border-radius: 8px; border: 2px solid #e5e7eb;\" onerror=\"this.src='data:image\/svg+xml,%3Csvg xmlns=%27http:\/\/www.w3.org\/2000\/svg%27 width=%27400%27 height=%27300%27%3E%3Crect fill=%27%23f3f4f6%27 width=%27400%27 height=%27300%27\/%3E%3Ctext fill=%27%236b7280%27 font-family=%27Arial%27 font-size=%2724%27 x=%2750%25%27 y=%2750%25%27 text-anchor=%27middle%27 dominant-baseline=%27middle%27%3ESem Imagem%3C\/text%3E%3C\/svg%3E'\">\r\n                                    <\/div>\r\n                                <\/div>\r\n                                \r\n                                <div class=\"form-group\" style=\"grid-column: 1 \/ -1;\">\r\n                                    <label>Nova Imagem (opcional - deixe em branco para manter a atual)<\/label>\r\n                                    <input type=\"file\" id=\"editProdImageFile\" accept=\"image\/*\">\r\n                                    <small style=\"color: #6b7280; display: block; margin-top: 5px;\">Ou insira uma URL abaixo:<\/small>\r\n                                    <input type=\"url\" id=\"editProdImageUrl\" placeholder=\"https:\/\/exemplo.com\/imagem.jpg\" style=\"margin-top: 5px;\">\r\n                                <\/div>\r\n                                \r\n                                <div class=\"form-group\">\r\n                                    <label>T\u00edtulo do Produto *<\/label>\r\n                                    <input type=\"text\" id=\"editProdName\" required>\r\n                                <\/div>\r\n                                \r\n                                <div class=\"form-group\">\r\n                                    <label>Pre\u00e7o (R$) *<\/label>\r\n                                    <input type=\"number\" id=\"editProdPrice\" step=\"0.01\" min=\"0\" required>\r\n                                <\/div>\r\n                                \r\n                                <div class=\"form-group\">\r\n                                    <label>Estoque<\/label>\r\n                                    <input type=\"number\" id=\"editProdStock\" min=\"0\" value=\"0\">\r\n                                <\/div>\r\n                                \r\n                                <div class=\"form-group\">\r\n                                    <label>Status<\/label>\r\n                                    <select id=\"editProdActive\">\r\n                                        <option value=\"true\">\u2705 Ativo<\/option>\r\n                                        <option value=\"false\">\u274c Inativo<\/option>\r\n                                    <\/select>\r\n                                <\/div>\r\n                                \r\n                                <div class=\"form-group\" style=\"grid-column: 1 \/ -1;\">\r\n                                    <label>Descri\u00e7\u00e3o *<\/label>\r\n                                    <textarea id=\"editProdDescription\" rows=\"4\" required><\/textarea>\r\n                                <\/div>\r\n                            <\/div>\r\n                            \r\n                            <div class=\"modal-footer\">\r\n                                <button type=\"button\" class=\"btn btn-secondary\" onclick=\"closeModal('editProductModal')\">Cancelar<\/button>\r\n                                <button type=\"submit\" class=\"btn btn-primary\">\ud83d\udcbe Salvar Altera\u00e7\u00f5es<\/button>\r\n                            <\/div>\r\n                        <\/form>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <script>\r\n                    \/\/ Fallback seguro para imagens quando o placeholder externo n\u00e3o resolver DNS\r\n                    function safeImageFallback(img) {\r\n                        try {\r\n                            if (!img || img.dataset.fallbackApplied) return;\r\n                            const text = img.getAttribute('alt') || 'Produto';\r\n                            const svg = `\r\n                                <svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='400' height='300'>\r\n                                    <rect width='100%' height='100%' fill='#f3f4f6'\/>\r\n                                    <text x='50%' y='50%' font-size='20' text-anchor='middle' fill='#6b7280' dy='.3em'>${text}<\/text>\r\n                                <\/svg>`;\r\n                            img.src = 'data:image\/svg+xml;utf8,' + encodeURIComponent(svg);\r\n                            img.dataset.fallbackApplied = '1';\r\n                        } catch (e) {\r\n                            console.warn('safeImageFallback error', e);\r\n                        }\r\n                    }\r\n                    \/\/ Gera um data URI SVG simples para usar como placeholder local\r\n                    function getPlaceholderDataURI(text = 'Produto', width = 400, height = 300) {\r\n                        const svg = `\r\n                            <svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='${width}' height='${height}'>\r\n                                <rect width='100%' height='100%' fill='#f3f4f6'\/>\r\n                                <text x='50%' y='50%' font-size='20' text-anchor='middle' fill='#6b7280' dy='.3em'>${text}<\/text>\r\n                            <\/svg>`;\r\n                        return 'data:image\/svg+xml;utf8,' + encodeURIComponent(svg);\r\n                    }\r\n                    \/\/ Helpers de logging e formata\u00e7\u00e3o\r\n                    function formatCurrency(value) {\r\n                        const n = Number(value);\r\n                        if (Number.isNaN(n)) return '0,00';\r\n                        return n.toFixed(2).replace('.', ',');\r\n                    }\r\n\r\n                    \/\/ Helper: Converter arquivo para base64\r\n                    function fileToBase64(file) {\r\n                        return new Promise((resolve, reject) => {\r\n                            const reader = new FileReader();\r\n                            reader.onload = () => resolve(reader.result);\r\n                            reader.onerror = reject;\r\n                            reader.readAsDataURL(file);\r\n                        });\r\n                    }\r\n\r\n                    \/\/ Handler global para erros n\u00e3o capturados: loga e mostra aviso de rede quando aplic\u00e1vel\r\n                    window.addEventListener('unhandledrejection', function(event) {\r\n                        console.warn('Unhandled rejection:', event.reason);\r\n                        const error = event.reason;\r\n                        const errorMsg = error?.toString() || '';\r\n                        if (errorMsg.includes('503') || errorMsg.includes('Service Unavailable') || errorMsg.includes('Failed to fetch') || errorMsg.includes('NetworkError')) {\r\n                            showNetworkError();\r\n                        }\r\n                    });\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para mostrar erro de rede (toast)\r\n                    function showNetworkError() {\r\n                        if (document.getElementById('networkErrorToast')) return;\r\n                        const toast = document.createElement('div');\r\n                        toast.id = 'networkErrorToast';\r\n                        toast.style.cssText = `\r\n                            position: fixed;\r\n                            bottom: 20px;\r\n                            right: 20px;\r\n                            background: #f59e0b;\r\n                            color: white;\r\n                            padding: 15px 20px;\r\n                            border-radius: 8px;\r\n                            box-shadow: 0 4px 12px rgba(0,0,0,0.2);\r\n                            z-index: 10000;\r\n                            max-width: 350px;\r\n                            animation: slideIn 0.3s ease-out;\r\n                        `;\r\n                        toast.innerHTML = `\r\n                            <strong>\u26a0\ufe0f Problema de Conex\u00e3o<\/strong><br>\r\n                            <small>Trabalhando em modo offline. Algumas funcionalidades podem estar limitadas.<\/small>\r\n                        `;\r\n                        document.body.appendChild(toast);\r\n                        setTimeout(() => {\r\n                            toast.style.animation = 'slideOut 0.3s ease-out';\r\n                            setTimeout(() => toast.remove(), 300);\r\n                        }, 5000);\r\n                    }\r\n\r\n                    \/\/ Adicionar anima\u00e7\u00f5es CSS\r\n                    const style = document.createElement('style');\r\n                    style.textContent = `\r\n                        @keyframes slideIn {\r\n                            from { transform: translateX(400px); opacity: 0; }\r\n                            to { transform: translateX(0); opacity: 1; }\r\n                        }\r\n                        @keyframes slideOut {\r\n                            from { transform: translateX(0); opacity: 1; }\r\n                            to { transform: translateX(400px); opacity: 0; }\r\n                        }\r\n                    `;\r\n                    document.head.appendChild(style);\r\n\r\n                    \/\/ ===============================\r\n                    \/\/ SISTEMA INTEGRADO COM APPWRITE\r\n                    \/\/ ===============================\r\n                    \/\/ Este sistema usa:\r\n                    \/\/ - Appwrite Account para autentica\u00e7\u00e3o segura (login\/registro)\r\n                    \/\/ - Appwrite Database para armazenar produtos, compras, estoque e vendas\r\n                    \/\/ - LocalStorage apenas como cache de fallback\r\n                    \/\/ ===============================\r\n\r\n                    \/\/ ===============================\r\n                    \/\/ CONFIGURA\u00c7\u00c3O DO APPWRITE\r\n                    \/\/ ===============================\r\n\r\n                    const appwriteConfig = {\r\n                        endpoint: 'https:\/\/nacional-appwrite.nounpw.easypanel.host\/v1',\r\n                        projectId: '692dd9a600251a3981a3',\r\n                        databaseId: '692ddb70001ab123da14', \/\/ ID correto do banco de dados\r\n                        collections: {\r\n                            users: '692ddb80001e4f4465a4',\r\n                            products: '692ddb8c001ac2c76694',\r\n                            purchases: '692ddb940001b5a8971c',\r\n                            stock: '692ddb9c000038a61f32',\r\n                            sales: '692ddba3001943b55f15',\r\n                            returns: '6938512c001ebf1fdea3'\r\n                        },\r\n                        bucketId: '692ddbbb0039b384e0ce',\r\n                        authId: '692dddda0024ed4d4fde'\r\n                    };\r\n\r\n                    \/\/ Inicializar SDK do Appwrite\r\n                    const client = new Appwrite.Client();\r\n\r\n                    client\r\n                        .setEndpoint(appwriteConfig.endpoint)\r\n                        .setProject(appwriteConfig.projectId);\r\n\r\n                    \/\/ Servi\u00e7os\r\n                    const account = new Appwrite.Account(client);\r\n                    const databases = new Appwrite.Databases(client);\r\n                    const storage = new Appwrite.Storage(client);\r\n\r\n                    console.log('\u2705 Appwrite configurado:', appwriteConfig.endpoint);\r\n                    \r\n                    \/\/ Suprimir aviso de localStorage (seguran\u00e7a: em produ\u00e7\u00e3o, configure um dom\u00ednio customizado no Appwrite)\r\n                    const originalWarn = console.warn;\r\n                    console.warn = function(...args) {\r\n                        const msg = args.join(' ');\r\n                        if (msg.includes('localStorage for session management') || msg.includes('custom domain')) return;\r\n                        originalWarn.apply(console, args);\r\n                    };\r\n\r\n                    \/\/ ===============================\r\n                    \/\/ FUN\u00c7\u00d5ES DE AUTENTICA\u00c7\u00c3O (APPWRITE)\r\n                    \/\/ ===============================\r\n\r\n                    \/\/ Verificar se h\u00e1 uma sess\u00e3o ativa\r\n                    async function checkSession() {\r\n                        try {\r\n                            const session = await account.get();\r\n                            return session;\r\n                        } catch (error) {\r\n                            return null;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Obter o role do usu\u00e1rio das prefer\u00eancias\r\n                    async function getUserRole() {\r\n                        try {\r\n                            const prefs = await account.getPrefs();\r\n                            return prefs.role || 'user';\r\n                        } catch (error) {\r\n                            console.error('Erro ao buscar role:', error);\r\n                            return 'user';\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Criar usu\u00e1rio no Appwrite Auth\r\n                    async function registerUser(name, email, password, phone, address) {\r\n                        try {\r\n                            \/\/ Criar conta no Appwrite Auth\r\n                            const user = await account.create(\r\n                                'unique()',\r\n                                email,\r\n                                password,\r\n                                name\r\n                            );\r\n\r\n                            \/\/ Fazer login autom\u00e1tico ap\u00f3s registro\r\n                            await account.createEmailPasswordSession(email, password);\r\n\r\n                            \/\/ Salvar informa\u00e7\u00f5es adicionais nas prefer\u00eancias\r\n                            await account.updatePrefs({\r\n                                role: 'user',\r\n                                phone: phone,\r\n                                address: address\r\n                            });\r\n\r\n                            \/\/ Criar documento na cole\u00e7\u00e3o users para compatibilidade\r\n                            await createDocument(appwriteConfig.collections.users, {\r\n                                id: Date.now(),\r\n                                name: name,\r\n                                email: email,\r\n                                password: '***', \/\/ N\u00e3o salvar senha real\r\n                                phone: phone,\r\n                                address: address,\r\n                                role: 'user',\r\n                                createdAt: new Date().toISOString()\r\n                            });\r\n\r\n                            return user;\r\n                        } catch (error) {\r\n                            console.error('Erro ao registrar usu\u00e1rio:', error);\r\n                            throw error;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Login com Appwrite Auth\r\n                    async function loginUser(email, password) {\r\n                        try {\r\n                            const session = await account.createEmailPasswordSession(email, password);\r\n                            return session;\r\n                        } catch (error) {\r\n                            console.error('Erro ao fazer login:', error);\r\n                            throw error;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Logout do Appwrite\r\n                    async function logoutUser() {\r\n                        try {\r\n                            \/\/ Preservar dados importantes antes de limpar\r\n                            const returns = localStorage.getItem('returns');\r\n                            const products = localStorage.getItem('products');\r\n                            const purchases = localStorage.getItem('purchases');\r\n                            const stock = localStorage.getItem('stock');\r\n                            const sales = localStorage.getItem('sales');\r\n                            const users = localStorage.getItem('users');\r\n                            \r\n                            await account.deleteSession('current');\r\n                            localStorage.clear();\r\n                            \r\n                            \/\/ Restaurar dados importantes\r\n                            if (returns) localStorage.setItem('returns', returns);\r\n                            if (products) localStorage.setItem('products', products);\r\n                            if (purchases) localStorage.setItem('purchases', purchases);\r\n                            if (stock) localStorage.setItem('stock', stock);\r\n                            if (sales) localStorage.setItem('sales', sales);\r\n                            if (users) localStorage.setItem('users', users);\r\n                            \r\n                            console.log('\u2705 Logout realizado, dados preservados');\r\n                        } catch (error) {\r\n                            console.error('Erro ao fazer logout:', error);\r\n                            \r\n                            \/\/ Preservar dados importantes antes de limpar\r\n                            const returns = localStorage.getItem('returns');\r\n                            const products = localStorage.getItem('products');\r\n                            const purchases = localStorage.getItem('purchases');\r\n                            const stock = localStorage.getItem('stock');\r\n                            const sales = localStorage.getItem('sales');\r\n                            const users = localStorage.getItem('users');\r\n                            \r\n                            localStorage.clear();\r\n                            \r\n                            \/\/ Restaurar dados importantes\r\n                            if (returns) localStorage.setItem('returns', returns);\r\n                            if (products) localStorage.setItem('products', products);\r\n                            if (purchases) localStorage.setItem('purchases', purchases);\r\n                            if (stock) localStorage.setItem('stock', stock);\r\n                            if (sales) localStorage.setItem('sales', sales);\r\n                            if (users) localStorage.setItem('users', users);\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Limpar cache e for\u00e7ar sincroniza\u00e7\u00e3o com Appwrite\r\n                    async function clearCacheAndSync() {\r\n                        console.log('\ud83d\udd04 Limpando cache e sincronizando com Appwrite...');\r\n                        localStorage.removeItem('products');\r\n                        localStorage.removeItem('purchases');\r\n                        console.log('\u2705 Cache limpo! Recarregando dados...');\r\n                        \r\n                        \/\/ Recarregar tudo do Appwrite\r\n                        const role = await getUserRole();\r\n                        if (role === 'admin') {\r\n                            await loadAdminProducts();\r\n                        } else {\r\n                            await loadProducts();\r\n                            await loadPurchases();\r\n                        }\r\n                        \r\n                        alert('\u2705 Cache limpo e dados sincronizados com sucesso!');\r\n                    }\r\n\r\n                    \/\/ Verificar produtos salvos no banco\r\n                    async function verifyProducts() {\r\n                        console.log('\ud83d\udd0d VERIFICANDO PRODUTOS NO DATABASE');\r\n                        console.log('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                        \r\n                        try {\r\n                            const response = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products\r\n                            );\r\n                            \r\n                            console.log('\u2705 Database ID:', appwriteConfig.databaseId);\r\n                            console.log('\u2705 Collection ID:', appwriteConfig.collections.products);\r\n                            console.log('\u2705 Total de produtos:', response.total);\r\n                            console.log('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            \r\n                            if (response.total === 0) {\r\n                                console.log('\u26a0\ufe0f Nenhum produto encontrado no banco!');\r\n                                \r\n                                \/\/ Limpar cache do LocalStorage tamb\u00e9m\r\n                                localStorage.removeItem('products');\r\n                                console.log('\u2705 Cache do LocalStorage limpo');\r\n                                \r\n                                alert(`\ud83d\udccb PRODUTOS NO DATABASE\\n\\n` +\r\n                                    `Total: 0 produtos\\n\\n` +\r\n                                    `\u26a0\ufe0f O banco est\u00e1 vazio!\\n` +\r\n                                    `\u2705 Cache limpo - pronto para adicionar produtos.\\n\\n` +\r\n                                    `Use o bot\u00e3o \"+ Adicionar Produto\" para come\u00e7ar.`);\r\n                            } else {\r\n                                console.log('\ud83d\udce6 LISTA DE PRODUTOS:');\r\n                                \r\n                                \/\/ Verificar se h\u00e1 produtos demos (IDs 1, 2, 3)\r\n                                const demoProducts = response.documents.filter(p => \r\n                                    p.name?.includes('Fone de Ouvido') || \r\n                                    p.name?.includes('Smart Watch') || \r\n                                    p.name?.includes('Teclado Mec\u00e2nico')\r\n                                );\r\n                                \r\n                                if (demoProducts.length > 0) {\r\n                                    console.warn('\u26a0\ufe0f ATEN\u00c7\u00c3O: Produtos DEMO encontrados!');\r\n                                    console.warn('   Use o bot\u00e3o \"\ud83d\uddd1\ufe0f Deletar Todos\" para remover os produtos demo');\r\n                                }\r\n                                \r\n                                response.documents.forEach((prod, index) => {\r\n                                    const isDemo = prod.name?.includes('Fone de Ouvido') || \r\n                                                prod.name?.includes('Smart Watch') || \r\n                                                prod.name?.includes('Teclado Mec\u00e2nico');\r\n                                    \r\n                                    console.log(`\\n[${index + 1}] ${prod.name || prod.productName} ${isDemo ? '\u26a0\ufe0f DEMO' : ''}`);\r\n                                    console.log('   $id:', prod.$id);\r\n                                    console.log('   Pre\u00e7o:', prod.price || prod.productPrice);\r\n                                    console.log('   Ativo:', prod.active || prod.isActive);\r\n                                    console.log('   Dados completos:', prod);\r\n                                });\r\n                                \r\n                                const productList = response.documents.map((p, i) => {\r\n                                    const isDemo = p.name?.includes('Fone de Ouvido') || \r\n                                                p.name?.includes('Smart Watch') || \r\n                                                p.name?.includes('Teclado Mec\u00e2nico');\r\n                                    return `${i + 1}. ${p.name || p.productName} - R$ ${formatCurrency(p.price || p.productPrice)} ${isDemo ? '(DEMO)' : ''}`;\r\n                                }).join('\\n');\r\n                                \r\n                                let message = `\ud83d\udccb PRODUTOS NO DATABASE\\n\\n` +\r\n                                    `Total: ${response.total} produtos\\n\\n` +\r\n                                    `${productList}\\n\\n`;\r\n                                \r\n                                if (demoProducts.length > 0) {\r\n                                    message += `\u26a0\ufe0f ${demoProducts.length} produtos DEMO encontrados!\\n` +\r\n                                            `Use \"\ud83d\uddd1\ufe0f Deletar Todos\" para remover.\\n\\n`;\r\n                                }\r\n                                \r\n                                message += `\ud83d\udccd Localiza\u00e7\u00e3o: Database > Collections > products`;\r\n                                \r\n                                alert(message);\r\n                            }\r\n                            \r\n                            console.log('\\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c ERRO ao verificar produtos:', error);\r\n                            alert('\u274c Erro ao buscar produtos:\\n\\n' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Deletar TODOS os produtos do banco\r\n                    async function deleteAllProducts() {\r\n                        const confirmMsg = '\u26a0\ufe0f ATEN\u00c7\u00c3O!\\n\\n' +\r\n                                        'Esta a\u00e7\u00e3o ir\u00e1 DELETAR TODOS OS PRODUTOS do banco de dados!\\n\\n' +\r\n                                        'Esta a\u00e7\u00e3o \u00e9 IRREVERS\u00cdVEL!\\n\\n' +\r\n                                        'Tem certeza que deseja continuar?';\r\n                        \r\n                        if (!confirm(confirmMsg)) return;\r\n                        \r\n                        \/\/ Segunda confirma\u00e7\u00e3o\r\n                        const secondConfirm = confirm('\ud83d\udea8 \u00daLTIMA CONFIRMA\u00c7\u00c3O!\\n\\nREALMENTE deseja deletar TODOS os produtos?\\n\\nDigite OK para continuar.');\r\n                        if (!secondConfirm) return;\r\n                        \r\n                        console.log('\ud83d\uddd1\ufe0f DELETANDO TODOS OS PRODUTOS...');\r\n                        console.log('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                        \r\n                        try {\r\n                            \/\/ Buscar todos os produtos\r\n                            const response = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products\r\n                            );\r\n                            \r\n                            console.log('\ud83d\udce6 Total de produtos a deletar:', response.total);\r\n                            \r\n                            let deleted = 0;\r\n                            let errors = 0;\r\n                            \r\n                            \/\/ Deletar cada produto\r\n                            for (const product of response.documents) {\r\n                                try {\r\n                                    await databases.deleteDocument(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.products,\r\n                                        product.$id\r\n                                    );\r\n                                    deleted++;\r\n                                    console.log(`\u2705 Deletado: ${product.name || product.productName} (${product.$id})`);\r\n                                } catch (error) {\r\n                                    errors++;\r\n                                    console.error(`\u274c Erro ao deletar ${product.$id}:`, error.message);\r\n                                }\r\n                            }\r\n                            \r\n                            \/\/ Limpar cache do LocalStorage tamb\u00e9m\r\n                            localStorage.removeItem('products');\r\n                            \r\n                            console.log('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            console.log(`\u2705 Deletados: ${deleted} produtos`);\r\n                            if (errors > 0) {\r\n                                console.log(`\u26a0\ufe0f Erros: ${errors}`);\r\n                            }\r\n                            \r\n                            alert(`\ud83d\uddd1\ufe0f Dele\u00e7\u00e3o Conclu\u00edda!\\n\\n\u2705 ${deleted} produtos deletados\\n${errors > 0 ? '\u26a0\ufe0f ' + errors + ' erros' : ''}\\n\\nO banco est\u00e1 limpo e pronto para importa\u00e7\u00e3o!`);\r\n                            \r\n                            \/\/ Recarregar lista\r\n                            await loadAdminProducts();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c ERRO ao deletar produtos:', error);\r\n                            alert('\u274c Erro ao deletar produtos:\\n\\n' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    \/\/ FUN\u00c7\u00c3O DE TESTE MANUAL - Use no console: testProductCreation()\r\n                    async function testProductCreation() {\r\n                        console.log('\ud83e\uddea TESTE MANUAL DE CRIA\u00c7\u00c3O DE PRODUTO');\r\n                        console.log('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                        \r\n                        const testProduct = {\r\n                            name: 'Produto Teste Manual',\r\n                            description: 'Teste direto do console',\r\n                            price: 99.99,\r\n                            image: getPlaceholderDataURI('Produto', 400, 300),\r\n                            active: true\r\n                        };\r\n                        \r\n                        console.log('\ud83d\udce6 Produto a ser criado:', testProduct);\r\n                        console.log('\ud83d\udccb Database ID:', appwriteConfig.databaseId);\r\n                        console.log('\ud83d\udccb Collection ID:', appwriteConfig.collections.products);\r\n                        \r\n                        \/\/ Verificar sess\u00e3o primeiro\r\n                        try {\r\n                            const session = await account.get();\r\n                            console.log('\ud83d\udc64 Usu\u00e1rio logado:', session.email);\r\n                            console.log('\ud83d\udc64 User ID:', session.$id);\r\n                        } catch (error) {\r\n                            console.error('\u274c N\u00e3o h\u00e1 sess\u00e3o ativa!');\r\n                            alert('\u274c Erro: Voc\u00ea precisa estar logado!\\n\\nFa\u00e7a login primeiro.');\r\n                            return;\r\n                        }\r\n                        \r\n                        try {\r\n                            console.log('\u23f3 Enviando requisi\u00e7\u00e3o para Appwrite...');\r\n                            const result = await databases.createDocument(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products,\r\n                                'unique()',\r\n                                testProduct\r\n                            );\r\n                            \r\n                            console.log('\u2705\u2705\u2705 SUCESSO! Produto criado:', result);\r\n                            console.log('\ud83c\udd94 ID:', result.$id);\r\n                            alert('\u2705 SUCESSO!\\n\\nProduto de teste criado com ID: ' + result.$id + '\\n\\nVerifique no Appwrite Console!');\r\n                            return result;\r\n                        } catch (error) {\r\n                            console.error('\u274c\u274c\u274c ERRO:', error);\r\n                            console.error('Mensagem:', error.message);\r\n                            console.error('C\u00f3digo:', error.code);\r\n                            console.error('Tipo:', error.type);\r\n                            console.error('Response:', error.response);\r\n                            \r\n                            let errorMsg = '\u274c ERRO!\\n\\n' + error.message + '\\n\\n';\r\n                            \r\n                            if (error.code === 401) {\r\n                                errorMsg += '\u26a0\ufe0f Erro de autentica\u00e7\u00e3o - fa\u00e7a login novamente\\n\\n';\r\n                            } else if (error.code === 404) {\r\n                                errorMsg += '\u26a0\ufe0f Collection n\u00e3o encontrada!\\n';\r\n                                errorMsg += 'Verifique se a collection existe:\\n';\r\n                                errorMsg += appwriteConfig.collections.products + '\\n\\n';\r\n                            } else if (error.code === 400) {\r\n                                errorMsg += '\u26a0\ufe0f Erro de valida\u00e7\u00e3o!\\n';\r\n                                errorMsg += 'Poss\u00edveis causas:\\n';\r\n                                errorMsg += '\u2022 Atributos faltando na collection\\n';\r\n                                errorMsg += '\u2022 Tipo de dado incorreto\\n';\r\n                                errorMsg += '\u2022 Atributo obrigat\u00f3rio vazio\\n\\n';\r\n                            } else if (error.code === 403) {\r\n                                errorMsg += '\u26a0\ufe0f ERRO DE PERMISS\u00c3O!\\n\\n';\r\n                                errorMsg += 'Verifique no Appwrite Console:\\n';\r\n                                errorMsg += '1. Database > Collections > products\\n';\r\n                                errorMsg += '2. Settings > Permissions\\n';\r\n                                errorMsg += '3. Adicione:\\n';\r\n                                errorMsg += '   \u2022 Role: Users (Create, Read)\\n';\r\n                                errorMsg += '   \u2022 ou Any (Create, Read)\\n\\n';\r\n                            }\r\n                            \r\n                            errorMsg += 'C\u00f3digo: ' + error.code + '\\n\\n';\r\n                            errorMsg += 'Veja detalhes no console (F12)';\r\n                            \r\n                            alert(errorMsg);\r\n                            throw error;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Tornar fun\u00e7\u00e3o dispon\u00edvel globalmente para teste no console\r\n                    window.testProductCreation = testProductCreation;\r\n\r\n                    \/\/ Fun\u00e7\u00e3o de diagn\u00f3stico para PURCHASES\r\n                    async function testPurchasesCollection() {\r\n                        console.log('\ud83d\udd0d DIAGN\u00d3STICO DA COLLECTION PURCHASES');\r\n                        console.log('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                        \r\n                        try {\r\n                            const session = await account.get();\r\n                            console.log('\u2705 Usu\u00e1rio logado:', session.email);\r\n                            console.log('\u2705 User ID:', session.$id);\r\n                            \r\n                            \/\/ Listar purchases existentes\r\n                            console.log('\\n\ud83d\udccb Listando purchases...');\r\n                            const purchases = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.purchases\r\n                            );\r\n                            console.log('\u2705 Total de purchases:', purchases.total);\r\n                            \r\n                            \/\/ Verificar estrutura esperada\r\n                            console.log('\\n\ud83d\udcdd Estrutura de dados esperada:');\r\n                            const expectedStructure = {\r\n                                id: 1234567890,\r\n                                userId: 123456,\r\n                                userName: 'Nome do Usu\u00e1rio',\r\n                                userEmail: 'email@teste.com',\r\n                                userAppwriteId: session.$id,\r\n                                productId: 1,\r\n                                productAppwriteId: '12345abc',\r\n                                productName: 'Produto Teste',\r\n                                quantity: 1,\r\n                                unitPrice: 99.90,\r\n                                total: 99.90,\r\n                                receipt: 'comprovante.pdf',\r\n                                receiptFileId: '',\r\n                                receiptUrl: 'data:image\/png;base64,...',\r\n                                receiptType: 'image\/png',\r\n                                status: 'Pendente',\r\n                                createdAt: new Date().toISOString()\r\n                            };\r\n                            console.log(expectedStructure);\r\n                            \r\n                            console.log('\\n\u2705 Collection purchases est\u00e1 acess\u00edvel!');\r\n                            console.log('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            alert('\u2705 Collection purchases OK!\\nTotal: ' + purchases.total + ' compras');\r\n                            \r\n                        } catch (error) {\r\n                            console.log('\\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            console.error('\u274c ERRO:', error);\r\n                            console.error('\u274c Mensagem:', error.message);\r\n                            console.error('\u274c C\u00f3digo:', error.code);\r\n                            \r\n                            let errorMsg = '\u274c Erro ao acessar collection purchases:\\n\\n';\r\n                            errorMsg += error.message + '\\n\\n';\r\n                            \r\n                            if (error.code === 404) {\r\n                                errorMsg += '\u26a0\ufe0f Collection n\u00e3o encontrada!\\n';\r\n                                errorMsg += 'ID esperado: ' + appwriteConfig.collections.purchases;\r\n                            }\r\n                            \r\n                            alert(errorMsg);\r\n                        }\r\n                    }\r\n                    \r\n                    window.testPurchasesCollection = testPurchasesCollection;\r\n\r\n                    \/\/ Fun\u00e7\u00e3o de diagn\u00f3stico - testar conex\u00e3o com Appwrite\r\n                    async function testAppwriteConnection() {\r\n                        console.log('\ud83d\udd0d DIAGN\u00d3STICO DO APPWRITE');\r\n                        console.log('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                        \r\n                        try {\r\n                            \/\/ Testar sess\u00e3o\r\n                            const session = await account.get();\r\n                            console.log('\u2705 Sess\u00e3o ativa:', session.email);\r\n                            \r\n                            \/\/ Testar listagem de produtos\r\n                            console.log('\\n\ud83d\udce6 Testando listagem de produtos...');\r\n                            const products = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products\r\n                            );\r\n                            console.log('\u2705 Total de produtos:', products.total);\r\n                            console.log('\u2705 Produtos:', products.documents);\r\n                            \r\n                            \/\/ Testar cria\u00e7\u00e3o de produto\r\n                            console.log('\\n\ud83e\uddea Testando cria\u00e7\u00e3o de produto com estrutura SIMPLIFICADA...');\r\n                            const testProduct = {\r\n                                name: 'Produto Teste',\r\n                                description: 'Teste de conex\u00e3o',\r\n                                price: 99.90,\r\n                                image: getPlaceholderDataURI('Teste', 400, 300),\r\n                                active: true\r\n                            };\r\n                            \r\n                            console.log('\ud83d\udcdd Estrutura do produto teste:', testProduct);\r\n                            \r\n                            const created = await databases.createDocument(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products,\r\n                                'unique()',\r\n                                testProduct\r\n                            );\r\n                            console.log('\u2705 Produto teste criado:', created.$id);\r\n                            console.log('\u2705 Dados salvos:', created);\r\n                            \r\n                            \/\/ Deletar produto teste\r\n                            await databases.deleteDocument(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products,\r\n                                created.$id\r\n                            );\r\n                            console.log('\u2705 Produto teste deletado');\r\n                            \r\n                            console.log('\\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            console.log('\u2705 TODOS OS TESTES PASSARAM!');\r\n                            alert('\u2705 Conex\u00e3o com Appwrite OK! Verifique o console para detalhes.');\r\n                            \r\n                        } catch (error) {\r\n                            console.log('\\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            console.error('\u274c ERRO NO DIAGN\u00d3STICO:', error);\r\n                            console.error('\u274c Mensagem:', error.message);\r\n                            console.error('\u274c C\u00f3digo:', error.code);\r\n                            alert('\u274c Erro na conex\u00e3o: ' + error.message + '\\n\\nVerifique o console (F12) para mais detalhes.');\r\n                        }\r\n                    }\r\n\r\n                    \/\/ ===============================\r\n                    \/\/ FUN\u00c7\u00d5ES DE BANCO DE DADOS (APPWRITE)\r\n                    \/\/ ===============================\r\n\r\n                    \/\/ Wrapper functions para usar Appwrite\r\n                    async function getUsers() {\r\n                        try {\r\n                            const response = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.users\r\n                            );\r\n                            return response.documents;\r\n                        } catch (error) {\r\n                            console.error('Erro ao buscar usu\u00e1rios:', error);\r\n                            \/\/ Fallback para LocalStorage se Appwrite falhar\r\n                            return JSON.parse(localStorage.getItem('users') || '[]');\r\n                        }\r\n                    }\r\n\r\n                    async function setUsers(users) {\r\n                        try {\r\n                            \/\/ Sincronizar com LocalStorage tamb\u00e9m\r\n                            localStorage.setItem('users', JSON.stringify(users));\r\n                            return true;\r\n                        } catch (error) {\r\n                            console.error('Erro ao salvar usu\u00e1rios:', error);\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    async function addUser(userData) {\r\n                        try {\r\n                            const response = await createDocument(appwriteConfig.collections.users, userData);\r\n                            \/\/ Sync com LocalStorage\r\n                            const users = await getUsers();\r\n                            localStorage.setItem('users', JSON.stringify(users));\r\n                            return response;\r\n                        } catch (error) {\r\n                            console.error('Erro ao adicionar usu\u00e1rio:', error);\r\n                            throw error;\r\n                        }\r\n                    }\r\n\r\n                    async function getProducts() {\r\n                        try {\r\n                            console.log('\ud83d\udd0d Buscando produtos do Appwrite...');\r\n                            console.log('\ud83d\udccb Database ID:', appwriteConfig.databaseId);\r\n                            console.log('\ud83d\udccb Collection ID:', appwriteConfig.collections.products);\r\n                            \r\n                            const response = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products\r\n                            );\r\n                            \r\n                            console.log('\ud83d\udce6 Resposta do Appwrite:', response);\r\n                            console.log('\ud83d\udce6 Total de documentos:', response.total);\r\n                            console.log('\ud83d\udce6 Produtos carregados do Appwrite:', response.documents.length);\r\n                            console.log('\ud83d\udce6 Lista de produtos:', response.documents);\r\n                            \r\n                            \/\/ Sincronizar LocalStorage com Appwrite (fonte \u00fanica de verdade)\r\n                            localStorage.setItem('products', JSON.stringify(response.documents));\r\n                            return response.documents;\r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao buscar produtos do Appwrite:', error);\r\n                            console.error('\u274c Detalhes do erro:', error.message);\r\n                            \/\/ Fallback para LocalStorage apenas em caso de erro de conex\u00e3o\r\n                            const localProducts = JSON.parse(localStorage.getItem('products') || '[]');\r\n                            console.log('\ud83d\udce6 Usando cache do LocalStorage:', localProducts.length);\r\n                            return localProducts;\r\n                        }\r\n                    }\r\n\r\n                    async function setProducts(products) {\r\n                        try {\r\n                            localStorage.setItem('products', JSON.stringify(products));\r\n                            return true;\r\n                        } catch (error) {\r\n                            console.error('Erro ao salvar produtos:', error);\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    async function deleteProductById(productId) {\r\n                        try {\r\n                            console.log('\ud83d\uddd1\ufe0f Deletando produto:', productId);\r\n                            console.log('\ud83d\udd0d Tipo do productId:', typeof productId, 'Valor:', productId, 'Tamanho:', productId.length);\r\n                            \r\n                            let deleted = false;\r\n                            \r\n                            \/\/ Tentar deletar do Appwrite\r\n                            try {\r\n                                \/\/ Primeiro, buscar todos os produtos para verificar se existe\r\n                                console.log('\ud83d\udd0d Buscando todos os produtos do Appwrite...');\r\n                                const allProducts = await databases.listDocuments(\r\n                                    appwriteConfig.databaseId,\r\n                                    appwriteConfig.collections.products\r\n                                );\r\n                                console.log('\ud83d\udce6 Total de produtos no Appwrite:', allProducts.documents.length);\r\n                                \r\n                                \/\/ Procurar o produto pelo $id ou pelo id\r\n                                const productDoc = allProducts.documents.find(p => p.$id === productId || p.id === productId);\r\n                                \r\n                                if (productDoc && productDoc.$id) {\r\n                                    console.log('\u2705 Produto encontrado no Appwrite!');\r\n                                    console.log('\ud83d\udccb $id:', productDoc.$id);\r\n                                    console.log('\ud83d\udccb id:', productDoc.id);\r\n                                    console.log('\ud83d\udccb name:', productDoc.name);\r\n                                    \r\n                                    \/\/ Deletar usando o $id do documento\r\n                                    console.log('\ud83d\udd39 Deletando documento com $id:', productDoc.$id);\r\n                                    await databases.deleteDocument(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.products,\r\n                                        productDoc.$id\r\n                                    );\r\n                                    console.log('\u2705 Produto deletado do Appwrite com sucesso!');\r\n                                    deleted = true;\r\n                                } else {\r\n                                    console.warn('\u26a0\ufe0f Produto n\u00e3o encontrado no Appwrite');\r\n                                    console.warn('\ud83d\udd0d productId procurado:', productId);\r\n                                    console.warn('\ud83d\udd0d Produtos dispon\u00edveis:', allProducts.documents.map(p => ({\r\n                                        $id: p.$id,\r\n                                        id: p.id,\r\n                                        name: p.name\r\n                                    })));\r\n                                }\r\n                            } catch (appwriteError) {\r\n                                console.error('\u274c Erro ao deletar do Appwrite:', appwriteError);\r\n                                console.error('\u274c C\u00f3digo do erro:', appwriteError.code);\r\n                                console.error('\u274c Mensagem:', appwriteError.message);\r\n                                console.error('\u274c Stack:', appwriteError.stack);\r\n                                \/\/ Continuar para tentar remover do localStorage\r\n                            }\r\n                            \r\n                            \/\/ Remover do localStorage\r\n                            try {\r\n                                const localProducts = JSON.parse(localStorage.getItem('products') || '[]');\r\n                                console.log('\ud83d\udce6 Produtos no localStorage antes:', localProducts.length);\r\n                                \r\n                                const filteredProducts = localProducts.filter(p => {\r\n                                    const pId = p.$id || p.id;\r\n                                    const shouldKeep = pId !== productId;\r\n                                    if (!shouldKeep) {\r\n                                        console.log('\ud83d\uddd1\ufe0f Removendo produto do localStorage:', pId);\r\n                                    }\r\n                                    return shouldKeep;\r\n                                });\r\n                                \r\n                                console.log('\ud83d\udce6 Produtos no localStorage depois:', filteredProducts.length);\r\n                                \r\n                                if (filteredProducts.length < localProducts.length) {\r\n                                    localStorage.setItem('products', JSON.stringify(filteredProducts));\r\n                                    console.log('\u2705 Produto removido do localStorage');\r\n                                    deleted = true;\r\n                                }\r\n                            } catch (localError) {\r\n                                console.error('\u26a0\ufe0f Erro ao remover do localStorage:', localError);\r\n                            }\r\n                            \r\n                            \/\/ Limpar TODOS os caches relacionados a produtos\r\n                            console.log('\ud83e\uddf9 Limpando caches...');\r\n                            localStorage.removeItem('products_cache');\r\n                            localStorage.removeItem('productsCache');\r\n                            \r\n                            if (!deleted) {\r\n                                throw new Error('Produto n\u00e3o encontrado para exclus\u00e3o');\r\n                            }\r\n                            \r\n                            console.log('\u2705 Produto exclu\u00eddo com sucesso!');\r\n                            return true;\r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao deletar produto:', error);\r\n                            throw error;\r\n                        }\r\n                    }\r\n\r\n                    async function getPurchases() {\r\n                        try {\r\n                            console.log('\ud83d\udd0d [getPurchases] Buscando compras do Appwrite...');\r\n                            \r\n                            \/\/ Buscar todas as p\u00e1ginas do Appwrite\r\n                            let allDocuments = [];\r\n                            let offset = 0;\r\n                            const limit = 25;\r\n                            let totalFetched = 0;\r\n                            \r\n                            \/\/ M\u00e1ximo 10 p\u00e1ginas (250 compras)\r\n                            for (let page = 0; page < 10; page++) {\r\n                                const response = await databases.listDocuments(\r\n                                    appwriteConfig.databaseId,\r\n                                    appwriteConfig.collections.purchases,\r\n                                    [],\r\n                                    limit,\r\n                                    offset\r\n                                );\r\n                                \r\n                                if (response.documents.length === 0) break;\r\n                                \r\n                                allDocuments = allDocuments.concat(response.documents);\r\n                                totalFetched = allDocuments.length;\r\n                                offset += limit;\r\n                                \r\n                                console.log(`\ud83d\udd0d [getPurchases] P\u00e1gina ${page + 1}: ${response.documents.length} documentos (Total: ${totalFetched})`);\r\n                                \r\n                                if (response.documents.length < limit) {\r\n                                    console.log('\ud83d\udd0d [getPurchases] \u2705 \u00daltima p\u00e1gina alcan\u00e7ada');\r\n                                    break;\r\n                                }\r\n                            }\r\n                            \r\n                            console.log('\ud83d\udd0d [getPurchases] \u2705 Total de compras buscadas:', allDocuments.length);\r\n                            \r\n                            return allDocuments;\r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao buscar compras do Appwrite:', error);\r\n                            return [];\r\n                        }\r\n                    }\r\n\r\n                    async function setPurchases(purchases) {\r\n                        try {\r\n                            localStorage.setItem('purchases', JSON.stringify(purchases));\r\n                            return true;\r\n                        } catch (error) {\r\n                            console.error('Erro ao salvar compras:', error);\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    async function updatePurchaseStatus(purchaseId, status, additionalData = {}) {\r\n                        try {\r\n                            \/\/ Buscar documento no Appwrite\r\n                            const purchases = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.purchases\r\n                            );\r\n                            const purchaseDoc = purchases.documents.find(p => p.id === purchaseId);\r\n                            \r\n                            if (purchaseDoc && purchaseDoc.$id) {\r\n                                await updateDocument(\r\n                                    appwriteConfig.collections.purchases,\r\n                                    purchaseDoc.$id,\r\n                                    { status, ...additionalData }\r\n                                );\r\n                            }\r\n                            \r\n                            \/\/ Sync LocalStorage\r\n                            const localPurchases = JSON.parse(localStorage.getItem('purchases') || '[]');\r\n                            const purchase = localPurchases.find(p => p.id === purchaseId);\r\n                            if (purchase) {\r\n                                purchase.status = status;\r\n                                Object.assign(purchase, additionalData);\r\n                                localStorage.setItem('purchases', JSON.stringify(localPurchases));\r\n                            }\r\n                            return true;\r\n                        } catch (error) {\r\n                            console.error('Erro ao atualizar status da compra:', error);\r\n                            \/\/ Fallback: atualizar apenas LocalStorage\r\n                            const localPurchases = JSON.parse(localStorage.getItem('purchases') || '[]');\r\n                            const purchase = localPurchases.find(p => p.id === purchaseId);\r\n                            if (purchase) {\r\n                                purchase.status = status;\r\n                                Object.assign(purchase, additionalData);\r\n                                localStorage.setItem('purchases', JSON.stringify(localPurchases));\r\n                            }\r\n                            return true;\r\n                        }\r\n                    }\r\n\r\n                    async function getStock() {\r\n                        try {\r\n                            const response = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.stock\r\n                            );\r\n                            return response.documents;\r\n                        } catch (error) {\r\n                            console.log('\u2139\ufe0f Usando estoque do LocalStorage (Appwrite indispon\u00edvel)');\r\n                            return JSON.parse(localStorage.getItem('stock') || '[]');\r\n                        }\r\n                    }\r\n\r\n                    async function setStock(stock) {\r\n                        try {\r\n                            localStorage.setItem('stock', JSON.stringify(stock));\r\n                            return true;\r\n                        } catch (error) {\r\n                            console.error('Erro ao salvar estoque:', error);\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    async function updateStockQuantity(stockId, newQuantity) {\r\n                        try {\r\n                            \/\/ Buscar documento no Appwrite\r\n                            const stocks = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.stock\r\n                            );\r\n                            const stockDoc = stocks.documents.find(s => s.id === stockId);\r\n                            \r\n                            if (stockDoc && stockDoc.$id) {\r\n                                await updateDocument(\r\n                                    appwriteConfig.collections.stock,\r\n                                    stockDoc.$id,\r\n                                    { quantity: newQuantity }\r\n                                );\r\n                            }\r\n                            \r\n                            \/\/ Sync LocalStorage\r\n                            const localStock = JSON.parse(localStorage.getItem('stock') || '[]');\r\n                            const stockItem = localStock.find(s => s.id === stockId);\r\n                            if (stockItem) {\r\n                                stockItem.quantity = newQuantity;\r\n                                localStorage.setItem('stock', JSON.stringify(localStock));\r\n                            }\r\n                            return true;\r\n                        } catch (error) {\r\n                            console.error('Erro ao atualizar estoque:', error);\r\n                            \/\/ Fallback: atualizar apenas LocalStorage\r\n                            const localStock = JSON.parse(localStorage.getItem('stock') || '[]');\r\n                            const stockItem = localStock.find(s => s.id === stockId);\r\n                            if (stockItem) {\r\n                                stockItem.quantity = newQuantity;\r\n                                localStorage.setItem('stock', JSON.stringify(localStock));\r\n                            }\r\n                            return true;\r\n                        }\r\n                    }\r\n\r\n                    async function getSales() {\r\n                        try {\r\n                            console.log('\ud83d\udd0d [getSales] Buscando vendas do Appwrite...');\r\n                            \r\n                            \/\/ Buscar todas as p\u00e1ginas do Appwrite\r\n                            let allDocuments = [];\r\n                            let offset = 0;\r\n                            const limit = 25;\r\n                            let totalFetched = 0;\r\n                            \r\n                            \/\/ M\u00e1ximo 10 p\u00e1ginas para evitar loop infinito (250 vendas max)\r\n                            for (let page = 0; page < 10; page++) {\r\n                                const response = await databases.listDocuments(\r\n                                    appwriteConfig.databaseId,\r\n                                    appwriteConfig.collections.sales,\r\n                                    [],\r\n                                    limit,\r\n                                    offset\r\n                                );\r\n                                \r\n                                if (response.documents.length === 0) break;\r\n                                \r\n                                allDocuments = allDocuments.concat(response.documents);\r\n                                totalFetched = allDocuments.length;\r\n                                offset += limit;\r\n                                \r\n                                console.log(`\ud83d\udd0d [getSales] P\u00e1gina ${page + 1}: ${response.documents.length} documentos (Total: ${totalFetched})`);\r\n                                \r\n                                if (response.documents.length < limit) {\r\n                                    console.log('\ud83d\udd0d [getSales] \u2705 \u00daltima p\u00e1gina alcan\u00e7ada');\r\n                                    break;\r\n                                }\r\n                            }\r\n                            \r\n                            console.log('\ud83d\udd0d [getSales] \u2705 Total de vendas do Appwrite:', allDocuments.length);\r\n                            \r\n                            \/\/ IMPORTANTE: Mesclar com vendas do localStorage que ainda n\u00e3o foram sincronizadas\r\n                            const localSales = JSON.parse(localStorage.getItem('sales') || '[]');\r\n                            \r\n                            \/\/ Adicionar vendas locais que n\u00e3o t\u00eam $id (n\u00e3o sincronizadas)\r\n                            const appwriteIds = new Set(allDocuments.map(s => s.id || s.$id));\r\n                            const localOnlySales = localSales.filter(s => !s.$id && !appwriteIds.has(s.id));\r\n                            \r\n                            if (localOnlySales.length > 0) {\r\n                                console.log('\u26a0\ufe0f [getSales] Vendas n\u00e3o sincronizadas:', localOnlySales.length);\r\n                                console.log('\u26a0\ufe0f [getSales] ATEN\u00c7\u00c3O: Vendas SEM $id (n\u00e3o aparecer\u00e3o no admin):');\r\n                                localOnlySales.forEach((s, idx) => {\r\n                                    console.log(`  ${idx + 1}. ID: ${s.id} | Status: \"${s.status}\" | Produto: ${s.productName} | Usu\u00e1rio: ${s.userName} | $id: \u274c N\u00c3O TEM`);\r\n                                });\r\n                                allDocuments = allDocuments.concat(localOnlySales);\r\n                            }\r\n                            \r\n                            \/\/ Log de TODAS as vendas mostrando se tem ou n\u00e3o $id\r\n                            console.log('\\n\ud83d\udccb [getSales] RESUMO DE TODAS AS VENDAS:');\r\n                            allDocuments.forEach((s, idx) => {\r\n                                const hasAppwriteId = !!s.$id;\r\n                                const fonte = hasAppwriteId ? '\u2705 Appwrite' : '\u274c LOCAL (n\u00e3o aparece no admin)';\r\n                                console.log(`\ud83d\udd0d [getSales] Venda ${idx + 1}:`, {\r\n                                    id: s.id,\r\n                                    $id: s.$id || '\u274c N\u00c3O TEM',\r\n                                    status: s.status,\r\n                                    statusType: typeof s.status,\r\n                                    productName: s.productName,\r\n                                    userName: s.userName,\r\n                                    fonte: fonte\r\n                                });\r\n                            });\r\n                            \r\n                            const semAppwriteId = allDocuments.filter(s => !s.$id);\r\n                            if (semAppwriteId.length > 0) {\r\n                                console.warn(`\\n\u26a0\ufe0f [getSales] ${semAppwriteId.length} VENDAS SEM $id - N\u00c3O APARECER\u00c3O NO PAINEL ADMIN!`);\r\n                                console.warn('\ud83d\udca1 Solu\u00e7\u00e3o: Clique em \"Sincronizar Vendas Locais\" no menu admin');\r\n                            }\r\n                            \r\n                            return allDocuments;\r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao buscar vendas do Appwrite:', error);\r\n                            \/\/ Em caso de erro, retornar ao menos as vendas locais\r\n                            const localSales = JSON.parse(localStorage.getItem('sales') || '[]');\r\n                            console.log('\u26a0\ufe0f Retornando vendas do localStorage devido a erro:', localSales.length);\r\n                            return localSales;\r\n                        }\r\n                    }\r\n\r\n                    async function setSales(sales) {\r\n                        try {\r\n                            localStorage.setItem('sales', JSON.stringify(sales));\r\n                            return true;\r\n                        } catch (error) {\r\n                            console.error('Erro ao salvar vendas:', error);\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Sincronizar vendas que foram salvas apenas no cache local (ex.: fallback quando Appwrite falhou)\r\n                    async function syncLocalSalesToAppwrite() {\r\n                        try {\r\n                            console.log('\ud83d\udd04 [syncLocalSalesToAppwrite] Verificando vendas locais n\u00e3o sincronizadas...');\r\n                            const localSales = JSON.parse(localStorage.getItem('sales') || '[]');\r\n                            console.log(`\ud83d\udcca Total de vendas no localStorage: ${localSales.length}`);\r\n                            \r\n                            const notSynced = localSales.filter(sale => !sale.$id);\r\n                            console.log(`\ud83d\udd0d Vendas N\u00c3O sincronizadas: ${notSynced.length}`);\r\n                            \r\n                            if (notSynced.length === 0) {\r\n                                console.log('\u2705 Todas as vendas j\u00e1 est\u00e3o sincronizadas!');\r\n                                return false;\r\n                            }\r\n                            \r\n                            let updated = false;\r\n                            let syncCount = 0;\r\n                            \r\n                            for (const sale of localSales) {\r\n                                if (sale.$id) continue; \/\/ j\u00e1 sincronizada\r\n                                \r\n                                console.log(`\ud83d\udce4 Sincronizando venda ${sale.id}:`, {\r\n                                    productName: sale.productName,\r\n                                    userName: sale.userName,\r\n                                    quantity: sale.quantity,\r\n                                    status: sale.status\r\n                                });\r\n                                \r\n                                try {\r\n                                    const { labelBase64, ...payload } = sale; \/\/ schema pode n\u00e3o ter labelBase64\r\n                                    const created = await createDocument(appwriteConfig.collections.sales, payload);\r\n                                    sale.$id = created.$id;\r\n                                    updated = true;\r\n                                    syncCount++;\r\n                                    console.log(`\u2705 Venda ${sale.id} sincronizada com Appwrite! Novo $id:`, created.$id);\r\n                                } catch (err) {\r\n                                    console.error(`\u274c Falha ao sincronizar venda ${sale.id}:`, err);\r\n                                    console.log('Payload que falhou:', sale);\r\n                                    if (err?.code === 401) {\r\n                                        console.warn('\u26a0\ufe0f 401 n\u00e3o autorizado ao sincronizar vendas. Fa\u00e7a login novamente.');\r\n                                    } else if (err?.code === 409) {\r\n                                        console.warn('\u26a0\ufe0f 409 conflito - documento pode j\u00e1 existir');\r\n                                    }\r\n                                }\r\n                            }\r\n                            \r\n                            if (updated) {\r\n                                localStorage.setItem('sales', JSON.stringify(localSales));\r\n                                console.log(`\u2705 [syncLocalSalesToAppwrite] ${syncCount} vendas sincronizadas com sucesso!`);\r\n                            }\r\n                            \r\n                            return updated;\r\n                        } catch (err) {\r\n                            console.warn('\u26a0\ufe0f Erro ao sincronizar vendas locais:', err.message || err);\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para FOR\u00c7AR envio de TODAS as vendas para o Appwrite\r\n                    async function forceUploadAllSalesToAppwrite() {\r\n                        try {\r\n                            console.log('\ud83d\ude80 ===== FOR\u00c7ANDO UPLOAD DE TODAS AS VENDAS =====');\r\n                            const localSales = JSON.parse(localStorage.getItem('sales') || '[]');\r\n                            console.log(`\ud83d\udcca Total de vendas no localStorage: ${localSales.length}`);\r\n                            \r\n                            if (localSales.length === 0) {\r\n                                alert('Nenhuma venda encontrada no localStorage!');\r\n                                return 0;\r\n                            }\r\n                            \r\n                            const notSynced = localSales.filter(sale => !sale.$id);\r\n                            console.log(`\ud83d\udd0d Vendas sem $id (n\u00e3o sincronizadas): ${notSynced.length}`);\r\n                            \r\n                            if (notSynced.length === 0) {\r\n                                alert('\u2705 Todas as vendas j\u00e1 est\u00e3o no Appwrite!');\r\n                                return 0;\r\n                            }\r\n                            \r\n                            let successCount = 0;\r\n                            let errorCount = 0;\r\n                            const errors = [];\r\n                            \r\n                            console.log(`\ud83d\udd04 Iniciando upload de ${notSynced.length} vendas...`);\r\n                            \r\n                            for (let i = 0; i < localSales.length; i++) {\r\n                                const sale = localSales[i];\r\n                                \r\n                                if (sale.$id) {\r\n                                    console.log(`\u23ed\ufe0f Venda ${sale.id} j\u00e1 sincronizada ($id: ${sale.$id})`);\r\n                                    continue;\r\n                                }\r\n                                \r\n                                console.log(`\\n\ud83d\udce4 [${i + 1}\/${localSales.length}] Enviando venda ${sale.id}:`, {\r\n                                    productName: sale.productName,\r\n                                    userName: sale.userName,\r\n                                    userEmail: sale.userEmail,\r\n                                    quantity: sale.quantity,\r\n                                    status: sale.status\r\n                                });\r\n                                \r\n                                try {\r\n                                    \/\/ Remover campos que n\u00e3o existem no schema do Appwrite\r\n                                    const { labelBase64, ...payload } = sale;\r\n                                    \r\n                                    \/\/ Criar documento no Appwrite\r\n                                    const created = await databases.createDocument(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.sales,\r\n                                        'unique()',\r\n                                        payload\r\n                                    );\r\n                                    \r\n                                    \/\/ Atualizar venda local com $id do Appwrite\r\n                                    sale.$id = created.$id;\r\n                                    successCount++;\r\n                                    \r\n                                    console.log(`\u2705 Venda ${sale.id} enviada com sucesso!`);\r\n                                    console.log(`   Appwrite $id: ${created.$id}`);\r\n                                    console.log(`   Status no Appwrite: ${created.status}`);\r\n                                    \r\n                                } catch (err) {\r\n                                    errorCount++;\r\n                                    const errorMsg = `Venda ${sale.id} (${sale.productName}): ${err.message}`;\r\n                                    errors.push(errorMsg);\r\n                                    \r\n                                    console.error(`\u274c Erro ao enviar venda ${sale.id}:`, err);\r\n                                    console.error('   C\u00f3digo:', err.code);\r\n                                    console.error('   Mensagem:', err.message);\r\n                                    console.error('   Payload:', payload);\r\n                                    \r\n                                    if (err?.code === 401) {\r\n                                        console.error('\u26a0\ufe0f 401 N\u00e3o autorizado - verifique se est\u00e1 logado');\r\n                                        break; \/\/ Parar se n\u00e3o estiver autorizado\r\n                                    } else if (err?.code === 409) {\r\n                                        console.warn('\u26a0\ufe0f 409 Conflito - documento pode j\u00e1 existir');\r\n                                    } else if (err?.code === 400) {\r\n                                        console.error('\u26a0\ufe0f 400 Bad Request - verifique os atributos da collection');\r\n                                    }\r\n                                }\r\n                            }\r\n                            \r\n                            \/\/ Salvar localStorage atualizado com os $id\r\n                            if (successCount > 0) {\r\n                                localStorage.setItem('sales', JSON.stringify(localSales));\r\n                                console.log(`\ud83d\udcbe localStorage atualizado com ${successCount} novos $id`);\r\n                            }\r\n                            \r\n                            \/\/ Relat\u00f3rio final\r\n                            console.log('\\n\ud83d\udcca ===== RELAT\u00d3RIO FINAL =====');\r\n                            console.log(`\u2705 Enviadas com sucesso: ${successCount}`);\r\n                            console.log(`\u274c Erros: ${errorCount}`);\r\n                            console.log(`\ud83d\udce6 Total processado: ${successCount + errorCount}`);\r\n                            \r\n                            if (errors.length > 0) {\r\n                                console.error('\\n\u274c Erros encontrados:');\r\n                                errors.forEach((err, idx) => console.error(`${idx + 1}. ${err}`));\r\n                            }\r\n                            \r\n                            \/\/ Mostrar alerta com resultado\r\n                            const message = `\r\n\ud83d\udcca Envio de Vendas para Appwrite\r\n\r\n\u2705 Sucesso: ${successCount} vendas\r\n\u274c Erros: ${errorCount} vendas\r\n\r\n${errors.length > 0 ? '\\n\u26a0\ufe0f Erros:\\n' + errors.slice(0, 3).join('\\n') + (errors.length > 3 ? '\\n...' : '') : ''}\r\n\r\n${successCount > 0 ? '\\n\u2705 Recarregue a p\u00e1gina para ver as atualiza\u00e7\u00f5es!' : ''}\r\n                            `.trim();\r\n                            \r\n                            alert(message);\r\n                            \r\n                            return successCount;\r\n                            \r\n                        } catch (err) {\r\n                            console.error('\u274c Erro cr\u00edtico ao for\u00e7ar upload:', err);\r\n                            alert('\u274c Erro cr\u00edtico: ' + err.message);\r\n                            return 0;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para corrigir vendas sem status\r\n                    async function fixSalesWithoutStatus() {\r\n                        try {\r\n                            console.log('\ud83d\udd27 [fixSalesWithoutStatus] Verificando vendas sem status...');\r\n                            const allSales = await getSales();\r\n                            let fixed = 0;\r\n                            \r\n                            for (const sale of allSales) {\r\n                                \/\/ Se n\u00e3o tem status ou est\u00e1 vazio\r\n                                if (!sale.status || sale.status === '') {\r\n                                    try {\r\n                                        console.log(`\ud83d\udd27 Corrigindo venda ${sale.$id} - adicionando status \"Aguardando Envio\"`);\r\n                                        await databases.updateDocument(\r\n                                            appwriteConfig.databaseId,\r\n                                            appwriteConfig.collections.sales,\r\n                                            sale.$id,\r\n                                            { status: 'Aguardando Envio' }\r\n                                        );\r\n                                        fixed++;\r\n                                    } catch (error) {\r\n                                        console.error(`\u274c Erro ao corrigir venda ${sale.$id}:`, error);\r\n                                    }\r\n                                }\r\n                            }\r\n                            \r\n                            console.log(`\u2705 [fixSalesWithoutStatus] ${fixed} vendas corrigidas`);\r\n                            return fixed;\r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao corrigir vendas:', error);\r\n                            return 0;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00f5es para gerenciar solicita\u00e7\u00f5es de retorno\r\n                    async function getReturns() {\r\n                        try {\r\n                            let returns = [];\r\n                            \r\n                            \/\/ Tentar buscar do Appwrite primeiro (se cole\u00e7\u00e3o estiver configurada)\r\n                            if (appwriteConfig.collections.returns && appwriteConfig.collections.returns !== 'returns_local') {\r\n                                try {\r\n                                    const response = await databases.listDocuments(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.returns\r\n                                    );\r\n                                    \r\n                                    returns = response.documents.map(doc => ({\r\n                                        id: doc.id,\r\n                                        purchaseId: doc.purchaseId,\r\n                                        productId: doc.productId,\r\n                                        productName: doc.productName,\r\n                                        quantity: doc.quantity,\r\n                                        userId: doc.userId,\r\n                                        userName: doc.userName,\r\n                                        currentUserStock: doc.currentUserStock,\r\n                                        status: doc.status,\r\n                                        requestedAt: doc.requestedAt,\r\n                                        processedAt: doc.processedAt,\r\n                                        rejectionReason: doc.rejectionReason,\r\n                                        salesIds: JSON.parse(doc.salesIds || '[]'),\r\n                                        $id: doc.$id\r\n                                    }));\r\n                                    \r\n                                    console.log('\ud83d\udce6 Retornos carregados do Appwrite:', returns.length);\r\n                                    \r\n                                    \/\/ Sincronizar com localStorage\r\n                                    localStorage.setItem('returns', JSON.stringify(returns));\r\n                                    return returns;\r\n                                } catch (appwriteError) {\r\n                                    console.warn('\u26a0\ufe0f Erro ao buscar do Appwrite, usando localStorage:', appwriteError.message);\r\n                                }\r\n                            }\r\n                            \r\n                            \/\/ Fallback: usar localStorage\r\n                            returns = JSON.parse(localStorage.getItem('returns') || '[]');\r\n                            console.log('\ud83d\udce6 Retornos carregados do localStorage:', returns.length);\r\n                            return returns;\r\n                        } catch (error) {\r\n                            console.error('Erro ao buscar retornos:', error);\r\n                            return [];\r\n                        }\r\n                    }\r\n\r\n                    async function setReturns(returns) {\r\n                        try {\r\n                            localStorage.setItem('returns', JSON.stringify(returns));\r\n                            return true;\r\n                        } catch (error) {\r\n                            console.error('Erro ao salvar retornos:', error);\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    async function updateSaleStatus(saleId, status, additionalData = {}) {\r\n                        try {\r\n                            \/\/ Buscar documento no Appwrite\r\n                            const sales = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.sales\r\n                            );\r\n                            const saleDoc = sales.documents.find(s => s.id === saleId);\r\n                            \r\n                            if (saleDoc && saleDoc.$id) {\r\n                                await updateDocument(\r\n                                    appwriteConfig.collections.sales,\r\n                                    saleDoc.$id,\r\n                                    { status, ...additionalData }\r\n                                );\r\n                            }\r\n                            \r\n                            \/\/ Sync LocalStorage\r\n                            const localSales = JSON.parse(localStorage.getItem('sales') || '[]');\r\n                            const sale = localSales.find(s => s.id === saleId);\r\n                            if (sale) {\r\n                                sale.status = status;\r\n                                Object.assign(sale, additionalData);\r\n                                localStorage.setItem('sales', JSON.stringify(localSales));\r\n                            }\r\n                            return true;\r\n                        } catch (error) {\r\n                            console.error('Erro ao atualizar status da venda:', error);\r\n                            \/\/ Fallback: atualizar apenas LocalStorage\r\n                            const localSales = JSON.parse(localStorage.getItem('sales') || '[]');\r\n                            const sale = localSales.find(s => s.id === saleId);\r\n                            if (sale) {\r\n                                sale.status = status;\r\n                                Object.assign(sale, additionalData);\r\n                                localStorage.setItem('sales', JSON.stringify(localSales));\r\n                            }\r\n                            return true;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para criar documento no Appwrite\r\n                    async function createDocument(collectionId, data) {\r\n                        try {\r\n                            console.log('\ud83d\udcdd Criando documento na collection:', collectionId);\r\n                            console.log('\ud83d\udcdd Database ID:', appwriteConfig.databaseId);\r\n                            console.log('\ud83d\udcdd Dados a serem salvos:', data);\r\n                            console.log('\ud83d\udcdd Quantidade de campos:', Object.keys(data).length);\r\n                            console.log('\ud83d\udcdd Campos:', Object.keys(data).join(', '));\r\n                            \r\n                            \/\/ Verificar tipos de dados\r\n                            console.log('\\n\ud83d\udd0d Verificando tipos de dados:');\r\n                            for (const [key, value] of Object.entries(data)) {\r\n                                console.log(`  ${key}: ${typeof value} = ${JSON.stringify(value).substring(0, 50)}`);\r\n                            }\r\n                            \r\n                            const response = await databases.createDocument(\r\n                                appwriteConfig.databaseId,\r\n                                collectionId,\r\n                                'unique()',\r\n                                data\r\n                            );\r\n                            \r\n                            console.log('\u2705 Documento criado com sucesso!');\r\n                            console.log('\u2705 Document ID:', response.$id);\r\n                            console.log('\u2705 Resposta completa:', response);\r\n                            return response;\r\n                        } catch (error) {\r\n                            console.error('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            console.error('\u274c ERRO ao criar documento');\r\n                            console.error('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            console.error('\u274c Collection ID:', collectionId);\r\n                            console.error('\u274c Database ID:', appwriteConfig.databaseId);\r\n                            console.error('\u274c Mensagem:', error.message);\r\n                            console.error('\u274c C\u00f3digo:', error.code);\r\n                            console.error('\u274c Tipo:', error.type);\r\n                            console.error('\u274c Resposta completa:', error.response);\r\n                            \r\n                            \/\/ Extrair nome do atributo problem\u00e1tico\r\n                            if (error.message) {\r\n                                const attrMatch = error.message.match(\/Unknown attribute[s]?:\\s*[\"']?([^\"'\\s,]+)[\"']?\/);\r\n                                if (attrMatch) {\r\n                                    console.error('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                                    console.error('\u26a0\ufe0f ATRIBUTO N\u00c3O ENCONTRADO: \"' + attrMatch[1] + '\"');\r\n                                    console.error('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                                    console.error('\\n\ud83d\udccb Campos que estamos tentando salvar:');\r\n                                    console.error(Object.keys(data));\r\n                                    console.error('\\n\ud83d\udca1 Verifique no Appwrite Console se o atributo \"' + attrMatch[1] + '\" existe na collection!');\r\n                                    console.error('\ud83d\udca1 Acesse: Databases \u2192 sua database \u2192 ' + collectionId + ' \u2192 Attributes');\r\n                                }\r\n                            }\r\n                            \r\n                            console.error('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            \r\n                            throw error;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para atualizar documento no Appwrite\r\n                    async function updateDocument(collectionId, documentId, data) {\r\n                        try {\r\n                            const response = await databases.updateDocument(\r\n                                appwriteConfig.databaseId,\r\n                                collectionId,\r\n                                documentId,\r\n                                data\r\n                            );\r\n                            return response;\r\n                        } catch (error) {\r\n                            console.error('Erro ao atualizar documento:', error);\r\n                            throw error;\r\n                        }\r\n                    }\r\n\r\n                    \/\/ ===============================\r\n                    \/\/ INICIALIZA\u00c7\u00c3O DO BANCO DE DADOS\r\n                    \/\/ ===============================\r\n\r\n                    async function initializeDatabase() {\r\n                        \/\/ Informa\u00e7\u00f5es de admin no console\r\n                        console.log('\ud83d\udccb Emails de Administrador:');\r\n                        console.log('   \u2022 admin@compragarantida.com');\r\n                        console.log('   \u2022 envionacional@envionacional.com.br');\r\n                        console.log('   Senha padr\u00e3o: admin123 (ou a senha cadastrada no Appwrite)');\r\n\r\n                        \/\/ N\u00c3O criar produtos de demonstra\u00e7\u00e3o automaticamente\r\n                        \/\/ O admin deve adicionar produtos manualmente ou via importa\u00e7\u00e3o CSV\r\n                        console.log('\u2139\ufe0f Para adicionar produtos:');\r\n                        console.log('   1. Use o bot\u00e3o \"+ Adicionar Produto\" no painel admin');\r\n                        console.log('   2. Ou importe uma planilha CSV');\r\n\r\n                        \/\/ Garantir que as collections vazias existam no LocalStorage como backup\r\n                        if (!localStorage.getItem('purchases')) {\r\n                            localStorage.setItem('purchases', JSON.stringify([]));\r\n                        }\r\n\r\n                        if (!localStorage.getItem('stock')) {\r\n                            localStorage.setItem('stock', JSON.stringify([]));\r\n                        }\r\n\r\n                        if (!localStorage.getItem('sales')) {\r\n                            localStorage.setItem('sales', JSON.stringify([]));\r\n                        }\r\n                    }\r\n\r\n                    function formatDate(dateString) {\r\n                        const date = new Date(dateString);\r\n                        return date.toLocaleString('pt-BR', {\r\n                            day: '2-digit',\r\n                            month: '2-digit',\r\n                            year: 'numeric',\r\n                            hour: '2-digit',\r\n                            minute: '2-digit'\r\n                        });\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o de debug para verificar vendas diretamente no Appwrite\r\n                    async function debugAppwriteSales() {\r\n                        console.log('====================================');\r\n                        console.log('\ud83d\udd0d DEBUG: VERIFICANDO VENDAS NO APPWRITE');\r\n                        console.log('====================================');\r\n                        \r\n                        try {\r\n                            \/\/ 1. Buscar DIRETAMENTE do Appwrite\r\n                            console.log('\ud83d\udce1 Fazendo query DIRETA no Appwrite...');\r\n                            console.log('Database ID:', appwriteConfig.databaseId);\r\n                            console.log('Collection ID:', appwriteConfig.collections.sales);\r\n                            \r\n                            const response = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.sales,\r\n                                [],    \/\/ queries\r\n                                500,   \/\/ limit\r\n                                0      \/\/ offset\r\n                            );\r\n                            \r\n                            console.log('\u2705 Resposta do Appwrite:', response);\r\n                            console.log('\ud83d\udcca Total de documentos:', response.total);\r\n                            console.log('\ud83d\udce6 Documentos retornados:', response.documents.length);\r\n                            \r\n                            \/\/ 2. Mostrar cada documento\r\n                            console.log('\\n\ud83d\udccb LISTA DE VENDAS NO APPWRITE:');\r\n                            response.documents.forEach((doc, index) => {\r\n                                console.log(`\\n--- Venda ${index + 1} ---`);\r\n                                console.log('$id:', doc.$id);\r\n                                console.log('id:', doc.id);\r\n                                console.log('status:', doc.status);\r\n                                console.log('status (tipo):', typeof doc.status);\r\n                                console.log('status (length):', doc.status?.length);\r\n                                console.log('status (bytes):', [...(doc.status || '')].map(c => c.charCodeAt(0)));\r\n                                console.log('productName:', doc.productName);\r\n                                console.log('userName:', doc.userName);\r\n                                console.log('quantity:', doc.quantity);\r\n                                console.log('createdAt:', doc.createdAt);\r\n                                console.log('Documento completo:', doc);\r\n                            });\r\n                            \r\n                            \/\/ 3. Buscar documento espec\u00edfico 69408145063625abe63c\r\n                            console.log('\\n\ud83d\udd0d ===== BUSCANDO DOCUMENTO ESPEC\u00cdFICO 69408145063625abe63c =====');\r\n                            try {\r\n                                const docEspecifico = await databases.getDocument(\r\n                                    appwriteConfig.databaseId,\r\n                                    appwriteConfig.collections.sales,\r\n                                    '69408145063625abe63c'\r\n                                );\r\n                                console.log('\u2705 Documento encontrado:');\r\n                                console.log('$id:', docEspecifico.$id);\r\n                                console.log('status:', docEspecifico.status || 'VAZIO');\r\n                                console.log('status (tipo):', typeof docEspecifico.status);\r\n                                console.log('productName:', docEspecifico.productName);\r\n                                console.log('userName:', docEspecifico.userName);\r\n                                console.log('quantity:', docEspecifico.quantity);\r\n                                console.log('createdAt:', docEspecifico.createdAt);\r\n                                console.log('\\n\ud83d\udccb Documento completo:', docEspecifico);\r\n                                \r\n                                \/\/ Verificar se \u00e9 pendente\r\n                                const isPendente = !docEspecifico.status || \r\n                                                  docEspecifico.status === '' || \r\n                                                  docEspecifico.status === 'Aguardando Envio' || \r\n                                                  docEspecifico.status === 'Pendente';\r\n                                console.log('\\n\u2753 \u00c9 pendente de envio?', isPendente);\r\n                            } catch (err) {\r\n                                console.error('\u274c Erro ao buscar documento espec\u00edfico:', err);\r\n                                console.log('Documento pode n\u00e3o existir ou ID incorreto');\r\n                            }\r\n                            \r\n                            \/\/ 4. Filtrar por status\r\n                            const pendentes = response.documents.filter(d => \r\n                                !d.status || d.status === '' || d.status === 'Aguardando Envio' || d.status === 'Pendente'\r\n                            );\r\n                            console.log('\\n\ud83d\udd0d Vendas pendentes (sem status, vazio, \"Aguardando Envio\" ou \"Pendente\"):', pendentes.length);\r\n                            console.log('Pendentes:', pendentes);\r\n                            \r\n                            \/\/ Mostrar status de todas as vendas\r\n                            console.log('\\n\ud83d\udccb Status de todas as vendas:');\r\n                            response.documents.forEach((doc, idx) => {\r\n                                console.log(`${idx + 1}. Status: \"${doc.status || 'VAZIO'}\" | Produto: ${doc.productName}`);\r\n                            });\r\n                            \r\n                            \/\/ 4. Verificar localStorage\r\n                            const localSales = JSON.parse(localStorage.getItem('sales') || '[]');\r\n                            console.log('\\n\ud83d\udcbe Vendas no localStorage:', localSales.length);\r\n                            console.log('LocalStorage:', localSales);\r\n                            \r\n                            \/\/ 5. Mostrar alerta com resumo\r\n                            alert(`\r\n    \ud83d\udd0d DEBUG - VENDAS NO APPWRITE\r\n\r\n    \ud83d\udcca Total no Appwrite: ${response.total}\r\n    \ud83d\udce6 Documentos retornados: ${response.documents.length}\r\n    \u23f3 Vendas Pendentes: ${pendentes.length}\r\n    \ud83d\udcbe Vendas no localStorage: ${localSales.length}\r\n\r\n    Verifique o console (F12) para detalhes completos!\r\n                            `);\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao buscar vendas:', error);\r\n                            alert('\u274c Erro ao buscar vendas: ' + error.message);\r\n                        }\r\n                        \r\n                        console.log('====================================');\r\n                    }\r\n\r\n                    \/\/ Auth Functions\r\n                    function toggleForms() {\r\n                        document.getElementById('loginForm').classList.toggle('hidden');\r\n                        document.getElementById('registerForm').classList.toggle('hidden');\r\n                    }\r\n\r\n                    async function checkAuth() {\r\n                        try {\r\n                            const session = await checkSession();\r\n                            if (session) {\r\n                                const role = await getUserRole();\r\n                                const prefs = await account.getPrefs();\r\n                                const user = {\r\n                                    id: session.$id,\r\n                                    name: session.name,\r\n                                    email: session.email,\r\n                                    role: role,\r\n                                    phone: prefs.phone || '',\r\n                                    address: prefs.address || ''\r\n                                };\r\n                                await showDashboard(user);\r\n                            }\r\n                        } catch (error) {\r\n                            console.log('Nenhuma sess\u00e3o ativa');\r\n                            handleAuthError(error);\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o global para tratar erro 401 (sess\u00e3o expirada)\r\n                    function handleAuthError(error) {\r\n                        if (error?.code === 401 || error?.status === 401) {\r\n                            console.warn('\ud83d\udd12 Sess\u00e3o expirada. Redirecionando para login...');\r\n                            \r\n                            \/\/ Limpar dados de sess\u00e3o\r\n                            sessionStorage.clear();\r\n                            \r\n                            \/\/ Mostrar tela de login\r\n                            document.getElementById('authSection').style.display = 'flex';\r\n                            document.getElementById('adminDashboard').style.display = 'none';\r\n                            document.getElementById('userDashboard').style.display = 'none';\r\n                            \r\n                            \/\/ Mostrar mensagem\r\n                            alert('\u26a0\ufe0f Sua sess\u00e3o expirou. Por favor, fa\u00e7a login novamente.');\r\n                            \r\n                            return true;\r\n                        }\r\n                        return false;\r\n                    }\r\n\r\n                    async function showDashboard(user) {\r\n                        console.log('\ud83c\udfaf showDashboard chamado para:', user.email, '| Role:', user.role);\r\n                        \r\n                        document.getElementById('authSection').style.display = 'none';\r\n                        \r\n                        if (user.role === 'admin') {\r\n                            console.log('\u2705 Mostrando dashboard ADMIN');\r\n                            document.getElementById('userDashboard').style.display = 'none';\r\n                            document.getElementById('adminDashboard').style.display = 'block';\r\n                            document.getElementById('adminName').textContent = user.name;\r\n                            await loadAdminData();\r\n                        } else {\r\n                            console.log('\u2705 Mostrando dashboard USU\u00c1RIO');\r\n                            document.getElementById('adminDashboard').style.display = 'none';\r\n                            document.getElementById('userDashboard').style.display = 'block';\r\n                            document.getElementById('userName').textContent = user.name;\r\n                            await loadUserData();\r\n                            \r\n                            \/\/ Registrar usu\u00e1rio como online e manter atualizado\r\n                            registerUserOnline();\r\n                            setInterval(registerUserOnline, 30000); \/\/ Atualizar a cada 30 segundos\r\n                        }\r\n                    }\r\n\r\n                    async function logout() {\r\n                        await logoutUser();\r\n                        location.reload();\r\n                    }\r\n\r\n                    function debugUsers() {\r\n                        getUsers().then(users => {\r\n                            console.clear();\r\n                            console.log('=== DEBUG DE USU\u00c1RIOS ===');\r\n                            console.log('Total de usu\u00e1rios:', users.length);\r\n                            console.table(users.map(u => ({ \r\n                                id: u.id, \r\n                                nome: u.name, \r\n                                email: u.email, \r\n                                senha: u.password, \r\n                                role: u.role \r\n                            })));\r\n                            alert('Informa\u00e7\u00f5es dos usu\u00e1rios foram exibidas no Console (F12)');\r\n                        });\r\n                    }\r\n\r\n                    function debugReturns() {\r\n                        const raw = localStorage.getItem('returns');\r\n                        console.clear();\r\n                        console.log('=== DEBUG DE RETORNOS ===');\r\n                        console.log('\ud83d\udce6 Raw localStorage:', raw);\r\n                        \r\n                        getReturns().then(returns => {\r\n                            console.log('\ud83d\udce6 Total de retornos:', returns.length);\r\n                            console.log('\ud83d\udce6 Retornos completos:', returns);\r\n                            \r\n                            const pending = returns.filter(r => r.status === 'Pendente');\r\n                            const approved = returns.filter(r => r.status === 'Aprovada');\r\n                            const rejected = returns.filter(r => r.status === 'Rejeitada');\r\n                            \r\n                            console.log('\u23f3 Pendentes:', pending.length);\r\n                            console.log('\u2705 Aprovadas:', approved.length);\r\n                            console.log('\u274c Rejeitadas:', rejected.length);\r\n                            \r\n                            console.table(returns.map(r => ({\r\n                                id: r.id,\r\n                                produto: r.productName,\r\n                                quantidade: r.quantity,\r\n                                cliente: r.userName,\r\n                                status: r.status,\r\n                                solicitado: new Date(r.requestedAt).toLocaleString('pt-BR')\r\n                            })));\r\n                            \r\n                            alert(`\ud83d\udcca Retornos no Sistema:\\n\\nTotal: ${returns.length}\\nPendentes: ${pending.length}\\nAprovadas: ${approved.length}\\nRejeitadas: ${rejected.length}\\n\\nDetalhes no console (F12)`);\r\n                        });\r\n                    }\r\n\r\n                    \/\/ Form Handlers\r\n                    document.getElementById('loginForm').addEventListener('submit', async function(e) {\r\n                        e.preventDefault();\r\n                        const email = document.getElementById('loginEmail').value.trim().toLowerCase();\r\n                        const password = document.getElementById('loginPassword').value;\r\n                        \r\n                        try {\r\n                            await loginUser(email, password);\r\n                            \r\n                            \/\/ Obter informa\u00e7\u00f5es do usu\u00e1rio\r\n                            const session = await account.get();\r\n                            let role = await getUserRole();\r\n                            const prefs = await account.getPrefs();\r\n                            \r\n                            \/\/ For\u00e7ar role de admin para os emails corretos\r\n                            if (email === 'admin@compragarantida.com' || email === 'envionacional@envionacional.com.br') {\r\n                                role = 'admin';\r\n                                \/\/ Garantir que as prefer\u00eancias estejam corretas\r\n                                try {\r\n                                    await account.updatePrefs({\r\n                                        ...prefs,\r\n                                        role: 'admin',\r\n                                        phone: prefs.phone || '(11) 99999-9999',\r\n                                        address: prefs.address || 'Sede Administrativa'\r\n                                    });\r\n                                } catch (prefError) {\r\n                                    console.log('Aviso ao atualizar prefer\u00eancias:', prefError);\r\n                                }\r\n                            }\r\n                            \r\n                            const user = {\r\n                                id: session.$id,\r\n                                name: session.name,\r\n                                email: session.email,\r\n                                role: role,\r\n                                phone: prefs.phone || '',\r\n                                address: prefs.address || ''\r\n                            };\r\n                            \r\n                            console.log('\u2705 Login bem-sucedido:', user.email, 'Role:', user.role);\r\n                            console.log('\ud83d\udd0d Redirecionando para dashboard...', user.role === 'admin' ? 'ADMIN' : 'USU\u00c1RIO');\r\n                            await showDashboard(user);\r\n                        } catch (error) {\r\n                            console.error('Erro no login:', error);\r\n                            \r\n                            if (error.code === 429) {\r\n                                alert('\u23f3 Muitas tentativas de login!\\n\\nPor favor, aguarde 1 minuto e tente novamente.\\n\\nDica: Verifique se est\u00e1 usando a senha correta.');\r\n                            } else if (error.code === 401) {\r\n                                alert('\u274c Email ou senha incorretos!\\n\\nVerifique suas credenciais e tente novamente.');\r\n                            } else {\r\n                                alert('Erro ao fazer login: ' + error.message);\r\n                            }\r\n                        }\r\n                    });\r\n                    document.getElementById('registerForm').addEventListener('submit', async function(e) {\r\n                        e.preventDefault();\r\n                        \r\n                        const name = document.getElementById('registerName').value;\r\n                        const email = document.getElementById('registerEmail').value.trim().toLowerCase();\r\n                        const password = document.getElementById('registerPassword').value;\r\n                        const phone = document.getElementById('registerPhone').value;\r\n                        const address = document.getElementById('registerAddress').value;\r\n                        \r\n                        try {\r\n                            await registerUser(name, email, password, phone, address);\r\n                            \r\n                            \/\/ Obter informa\u00e7\u00f5es do usu\u00e1rio\r\n                            const session = await account.get();\r\n                            const role = await getUserRole();\r\n                            const prefs = await account.getPrefs();\r\n                            \r\n                            const user = {\r\n                                id: session.$id,\r\n                                name: session.name,\r\n                                email: session.email,\r\n                                role: role,\r\n                                phone: prefs.phone || '',\r\n                                address: prefs.address || ''\r\n                            };\r\n                            \r\n                            console.log('\u2705 Cadastro bem-sucedido! Login autom\u00e1tico realizado.');\r\n                            await showDashboard(user);\r\n                        } catch (error) {\r\n                            console.error('Erro no cadastro:', error);\r\n                            if (error.code === 409) {\r\n                                alert('Este email j\u00e1 est\u00e1 cadastrado!');\r\n                            } else {\r\n                                alert('Erro ao cadastrar: ' + error.message);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    \/\/ Tab Functions\r\n                    async function loadUserData() {\r\n                        await loadProducts();\r\n                        await loadPurchases();\r\n                        await loadSales();\r\n                        await loadMyReturns();\r\n                    }\r\n\r\n                    async function loadAdminData() {\r\n                        console.log('\ud83d\udd04 [loadAdminData] Carregando dados do admin...');\r\n                        \r\n                        \/\/ IMPORTANTE: Sincronizar vendas locais primeiro\r\n                        console.log('\ud83d\udd04 Sincronizando vendas locais com Appwrite...');\r\n                        const synced = await syncLocalSalesToAppwrite();\r\n                        \r\n                        if (synced) {\r\n                            console.log('\u2705 Vendas locais sincronizadas!');\r\n                        }\r\n                        \r\n                        \/\/ Verificar se h\u00e1 vendas apenas no localStorage\r\n                        const localSales = JSON.parse(localStorage.getItem('sales') || '[]');\r\n                        const notSyncedCount = localSales.filter(s => !s.$id).length;\r\n                        \r\n                        if (notSyncedCount > 0) {\r\n                            console.warn(`\u26a0\ufe0f ATEN\u00c7\u00c3O: ${notSyncedCount} vendas apenas no localStorage deste navegador!`);\r\n                            console.warn('\ud83d\udca1 Vendas de OUTROS navegadores\/usu\u00e1rios podem n\u00e3o aparecer aqui!');\r\n                            console.warn('\ud83d\udca1 Para ver TODAS as vendas, os usu\u00e1rios devem acessar o painel para sincronizar.');\r\n                        }\r\n                        \r\n                        await loadPendingShipments();\r\n                        \r\n                        \/\/ Carregar tamb\u00e9m as solicita\u00e7\u00f5es de retorno para o badge de notifica\u00e7\u00e3o\r\n                        const returns = await getReturns();\r\n                        const pendingCount = returns.filter(r => r.status === 'Pendente').length;\r\n                        console.log('\ud83d\udd14 Solicita\u00e7\u00f5es de retorno pendentes:', pendingCount);\r\n                        \r\n                        \/\/ Iniciar rastreamento de usu\u00e1rios online\r\n                        updateOnlineUsersCount();\r\n                        \/\/ Atualizar a cada 30 segundos\r\n                        setInterval(updateOnlineUsersCount, 30000);\r\n                        \r\n                        \/\/ Atualizar contadores do painel\r\n                        updateAdminCounters();\r\n                        \/\/ Atualizar contadores a cada 30 segundos\r\n                        setInterval(updateAdminCounters, 30000);\r\n                    }\r\n\r\n                    async function updateOnlineUsersCount() {\r\n                        try {\r\n                            \/\/ Registrar o admin como online\r\n                            const currentSession = await account.get();\r\n                            const now = Date.now();\r\n                            \r\n                            \/\/ Atualizar timestamp do admin\r\n                            const onlineUsers = JSON.parse(localStorage.getItem('onlineUsers') || '{}');\r\n                            onlineUsers[currentSession.$id] = {\r\n                                name: currentSession.name,\r\n                                email: currentSession.email,\r\n                                lastSeen: now\r\n                            };\r\n                            \r\n                            \/\/ Remover usu\u00e1rios inativos (mais de 2 minutos sem atualiza\u00e7\u00e3o)\r\n                            const twoMinutesAgo = now - (2 * 60 * 1000);\r\n                            Object.keys(onlineUsers).forEach(userId => {\r\n                                if (onlineUsers[userId].lastSeen < twoMinutesAgo) {\r\n                                    delete onlineUsers[userId];\r\n                                }\r\n                            });\r\n                            \r\n                            localStorage.setItem('onlineUsers', JSON.stringify(onlineUsers));\r\n                            \r\n                            \/\/ Atualizar contador na interface\r\n                            const count = Object.keys(onlineUsers).length;\r\n                            const counterElement = document.getElementById('onlineUsersCount');\r\n                            if (counterElement) {\r\n                                counterElement.textContent = count;\r\n                                console.log('\ud83d\udc65 Usu\u00e1rios online:', count);\r\n                            }\r\n                        } catch (error) {\r\n                            console.error('Erro ao atualizar usu\u00e1rios online:', error);\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para usu\u00e1rios comuns registrarem presen\u00e7a online\r\n                    async function registerUserOnline() {\r\n                        try {\r\n                            const currentSession = await account.get();\r\n                            const now = Date.now();\r\n                            \r\n                            const onlineUsers = JSON.parse(localStorage.getItem('onlineUsers') || '{}');\r\n                            onlineUsers[currentSession.$id] = {\r\n                                name: currentSession.name,\r\n                                email: currentSession.email,\r\n                                lastSeen: now\r\n                            };\r\n                            \r\n                            \/\/ Limpar usu\u00e1rios inativos\r\n                            const twoMinutesAgo = now - (2 * 60 * 1000);\r\n                            Object.keys(onlineUsers).forEach(userId => {\r\n                                if (onlineUsers[userId].lastSeen < twoMinutesAgo) {\r\n                                    delete onlineUsers[userId];\r\n                                }\r\n                            });\r\n                            \r\n                            localStorage.setItem('onlineUsers', JSON.stringify(onlineUsers));\r\n                        } catch (error) {\r\n                            \/\/ Usu\u00e1rio n\u00e3o est\u00e1 logado\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para atualizar contadores do painel administrativo\r\n                    async function updateAdminCounters() {\r\n                        try {\r\n                            const sales = await getSales();\r\n                            const purchases = await getPurchases();\r\n                            \r\n                            \/\/ === ESTAT\u00cdSTICAS DE VENDAS ===\r\n                            const totalVendas = sales.length;\r\n                            const totalProdutosVendidos = sales.reduce((sum, s) => sum + (s.quantity || 0), 0);\r\n                            \r\n                            \/\/ Vendas pendentes de envio\r\n                            const vendasPendentes = sales.filter(s => \r\n                                !s.status || s.status === '' || s.status === 'Aguardando Envio' || s.status === 'Pendente'\r\n                            ).length;\r\n                            \r\n                            \/\/ Vendas j\u00e1 enviadas\r\n                            const vendasEnviadas = sales.filter(s => s.status === 'Enviado').length;\r\n                            \r\n                            \/\/ Atualizar os cards de estat\u00edsticas\r\n                            const totalVendasEl = document.getElementById('totalVendas');\r\n                            const totalProdutosVendidosEl = document.getElementById('totalProdutosVendidos');\r\n                            const totalVendasPendentesEl = document.getElementById('totalVendasPendentes');\r\n                            const totalVendasEnviadasEl = document.getElementById('totalVendasEnviadas');\r\n                            \r\n                            if (totalVendasEl) totalVendasEl.textContent = totalVendas;\r\n                            if (totalProdutosVendidosEl) totalProdutosVendidosEl.textContent = totalProdutosVendidos;\r\n                            if (totalVendasPendentesEl) totalVendasPendentesEl.textContent = vendasPendentes;\r\n                            if (totalVendasEnviadasEl) totalVendasEnviadasEl.textContent = vendasEnviadas;\r\n                            \r\n                            \/\/ === ESTAT\u00cdSTICAS DE COMPRAS ===\r\n                            const totalCompras = purchases.length;\r\n                            const comprasAprovadas = purchases.filter(p => p.status === 'Aprovada').length;\r\n                            \r\n                            const totalComprasEl = document.getElementById('totalCompras');\r\n                            const totalComprasAprovadasEl = document.getElementById('totalComprasAprovadas');\r\n                            \r\n                            if (totalComprasEl) totalComprasEl.textContent = totalCompras;\r\n                            if (totalComprasAprovadasEl) totalComprasAprovadasEl.textContent = comprasAprovadas;\r\n                            \r\n                            console.log('\ud83d\udcca Estat\u00edsticas de Vendas:', {\r\n                                totalVendas,\r\n                                totalProdutosVendidos,\r\n                                vendasPendentes,\r\n                                vendasEnviadas\r\n                            });\r\n                            \r\n                            console.log('\ud83d\udcca Estat\u00edsticas de Compras:', {\r\n                                totalCompras,\r\n                                comprasAprovadas\r\n                            });\r\n                            \r\n                            \/\/ === CONTADORES DO HEADER ===\r\n                            \/\/ Contar produtos pendentes (soma das quantidades)\r\n                            \/\/ Aceitar vendas sem status, com status vazio, \"Aguardando Envio\" ou \"Pendente\"\r\n                            const pendingSales = sales.filter(s => \r\n                                !s.status || s.status === '' || s.status === 'Aguardando Envio' || s.status === 'Pendente'\r\n                            );\r\n                            const pendingCount = pendingSales.reduce((sum, s) => sum + (s.quantity || 0), 0);\r\n                            \r\n                            console.log('\ud83d\udd0d [updateAdminCounters] Vendas pendentes encontradas:', {\r\n                                total: pendingSales.length,\r\n                                produtos: pendingCount,\r\n                                vendas: pendingSales.map(s => ({\r\n                                    id: s.$id || s.id,\r\n                                    status: s.status,\r\n                                    quantity: s.quantity,\r\n                                    product: s.productName\r\n                                }))\r\n                            });\r\n                            \r\n                            \/\/ Contar produtos enviados hoje\r\n                            const today = new Date().toISOString().split('T')[0];\r\n                            const shippedToday = sales.filter(s => {\r\n                                if (s.status !== 'Enviado') return false;\r\n                                const shippedDate = new Date(s.shippedAt || s.createdAt).toISOString().split('T')[0];\r\n                                return shippedDate === today;\r\n                            });\r\n                            const shippedTodayCount = shippedToday.reduce((sum, s) => sum + (s.quantity || 0), 0);\r\n                            \r\n                            \/\/ Contar aprova\u00e7\u00f5es pendentes (compras com status Pendente)\r\n                            const pendingApprovals = purchases.filter(p => p.status === 'Pendente');\r\n                            const approvalsCount = pendingApprovals.length;\r\n                            \r\n                            \/\/ Atualizar interface\r\n                            const pendingElement = document.getElementById('pendingShipmentsCount');\r\n                            const shippedElement = document.getElementById('shippedTodayCount');\r\n                            const approvalsElement = document.getElementById('pendingApprovalsCount');\r\n                            \r\n                            if (pendingElement) {\r\n                                pendingElement.textContent = pendingCount;\r\n                            }\r\n                            \r\n                            if (shippedElement) {\r\n                                shippedElement.textContent = shippedTodayCount;\r\n                            }\r\n                            \r\n                            if (approvalsElement) {\r\n                                approvalsElement.textContent = approvalsCount;\r\n                            }\r\n                            \r\n                            console.log('\ud83d\udcca Contadores atualizados - Pendentes:', pendingCount, 'Enviados hoje:', shippedTodayCount, 'Aprova\u00e7\u00f5es:', approvalsCount);\r\n                        } catch (error) {\r\n                            console.error('Erro ao atualizar contadores:', error);\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Cat\u00e1logo de Produtos\r\n                    async function loadProducts() {\r\n                        console.log('\ud83d\udd04 Carregando produtos no cat\u00e1logo...');\r\n                        const products = (await getProducts()).filter(p => p.active !== false);\r\n                        const productsList = document.getElementById('productsList');\r\n                        \r\n                        console.log('\ud83d\udce6 Produtos ativos:', products.length);\r\n                        \r\n                        if (!productsList) {\r\n                            console.error('\u274c Elemento productsList n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        console.log('\u2705 Elemento productsList encontrado');\r\n                        \r\n                        if (products.length === 0) {\r\n                            productsList.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Nenhum produto dispon\u00edvel<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        productsList.innerHTML = products.map(product => {\r\n                            const stock = product.stock || 0;\r\n                            const stockClass = stock > 10 ? 'success' : stock > 0 ? 'warning' : 'danger';\r\n                            const stockText = stock > 0 ? `${stock} unidades dispon\u00edveis` : 'Sem estoque';\r\n                            const stockIcon = stock > 10 ? '\u2705' : stock > 0 ? '\u26a0\ufe0f' : '\u274c';\r\n                            \r\n                            return `\r\n                            <div class=\"product-card\">\r\n                                <img decoding=\"async\" src=\"${product.image}\" alt=\"${product.name}\" class=\"product-image\" onerror=\"safeImageFallback(this)\">\r\n                                <div class=\"product-info\">\r\n                                    <div class=\"product-name\">${product.name}<\/div>\r\n                                    <div class=\"product-description\">${product.description}<\/div>\r\n                                    <div class=\"product-price\">R$ ${formatCurrency(product.price)}<\/div>\r\n                                    <div class=\"product-stock\" style=\"margin: 8px 0; font-size: 13px; color: var(--${stockClass}-color); font-weight: 600;\">\r\n                                        ${stockIcon} ${stockText}\r\n                                    <\/div>\r\n                                    <button class=\"btn btn-primary\" onclick=\"openReservaModal('${product.$id || product.id}')\" ${stock === 0 ? 'disabled style=\"opacity: 0.5; cursor: not-allowed;\"' : ''}>\r\n                                        ${stock === 0 ? 'Indispon\u00edvel' : 'Comprar'}\r\n                                    <\/button>\r\n                                <\/div>\r\n                            <\/div>\r\n                        `}).join('');\r\n                        console.log('\u2705 Cat\u00e1logo de produtos atualizado na tela!');\r\n                    }\r\n\r\n                    async function filterProducts() {\r\n                        const searchTerm = document.getElementById('searchProduct').value.toLowerCase();\r\n                        const products = (await getProducts()).filter(p => p.active !== false);\r\n                        const filtered = products.filter(p => \r\n                            p.name.toLowerCase().includes(searchTerm) ||\r\n                            p.description.toLowerCase().includes(searchTerm)\r\n                        );\r\n                        \r\n                        const productsList = document.getElementById('productsList');\r\n                        if (!productsList) return;\r\n                        \r\n                        if (filtered.length === 0) {\r\n                            productsList.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Nenhum produto encontrado<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        productsList.innerHTML = filtered.map(product => {\r\n                            const stock = product.stock || 0;\r\n                            const stockClass = stock > 10 ? 'success' : stock > 0 ? 'warning' : 'danger';\r\n                            const stockText = stock > 0 ? `${stock} unidades dispon\u00edveis` : 'Sem estoque';\r\n                            const stockIcon = stock > 10 ? '\u2705' : stock > 0 ? '\u26a0\ufe0f' : '\u274c';\r\n                            \r\n                            return `\r\n                            <div class=\"product-card\">\r\n                                <img decoding=\"async\" src=\"${product.image}\" alt=\"${product.name}\" class=\"product-image\" onerror=\"safeImageFallback(this)\">\r\n                                <div class=\"product-info\">\r\n                                    <div class=\"product-name\">${product.name}<\/div>\r\n                                    <div class=\"product-description\">${product.description}<\/div>\r\n                                    <div class=\"product-price\">R$ ${formatCurrency(product.price)}<\/div>\r\n                                    <div class=\"product-stock\" style=\"margin: 8px 0; font-size: 13px; color: var(--${stockClass}-color); font-weight: 600;\">\r\n                                        ${stockIcon} ${stockText}\r\n                                    <\/div>\r\n                                    <button class=\"btn btn-primary\" onclick=\"openReservaModal('${product.$id || product.id}')\" ${stock === 0 ? 'disabled style=\"opacity: 0.5; cursor: not-allowed;\"' : ''}>\r\n                                        ${stock === 0 ? 'Indispon\u00edvel' : 'Comprar'}\r\n                                    <\/button>\r\n                                <\/div>\r\n                            <\/div>\r\n                        `}).join('');\r\n                    }\r\n\r\n                    let currentReservation = null;\r\n\r\n                    async function openReservaModal(productId) {\r\n                        console.log('\ud83d\uded2 openReservaModal chamado com ID:', productId, 'tipo:', typeof productId);\r\n                        const products = await getProducts();\r\n                        console.log('\ud83d\udce6 Total de produtos:', products.length);\r\n                        console.log('\ud83d\udce6 IDs dispon\u00edveis:', products.map(p => ({ id: p.id, $id: p.$id, name: p.name })));\r\n                        \r\n                        const product = products.find(p => (p.$id === productId || p.id === productId));\r\n                        \r\n                        if (!product) {\r\n                            console.error('\u274c Produto n\u00e3o encontrado! ID buscado:', productId);\r\n                            alert('Produto n\u00e3o encontrado! ID: ' + productId);\r\n                            return;\r\n                        }\r\n                        \r\n                        console.log('\u2705 Produto encontrado:', product);\r\n                        \r\n                        currentReservation = { \r\n                            product, \r\n                            quantity: 1,\r\n                            productId: product.$id || product.id\r\n                        };\r\n                        \r\n                        document.getElementById('reservaProductId').value = product.$id || product.id;\r\n                        document.getElementById('reservaProductName').value = product.name;\r\n                        document.getElementById('reservaProductPrice').value = 'R$ ' + formatCurrency(product.price);\r\n                        document.getElementById('reservaQuantity').value = 1;\r\n                        document.getElementById('reservaTotal').value = 'R$ ' + formatCurrency(product.price);\r\n                        \r\n                        \/\/ Garantir que o listener do formul\u00e1rio est\u00e1 anexado\r\n                        const reservaForm = document.getElementById('reservaForm');\r\n                        if (reservaForm && !reservaForm._listenerAttached) {\r\n                            console.log('\ud83d\udd17 Anexando listener ao formul\u00e1rio de reserva...');\r\n                            reservaForm.addEventListener('submit', function(e) {\r\n                                console.log('\ud83d\udce8 Submit event disparado no reservaForm!');\r\n                                handleReservaSubmit(e);\r\n                            });\r\n                            reservaForm._listenerAttached = true;\r\n                            console.log('\u2705 Listener de reserva anexado');\r\n                        }\r\n                        \r\n                        document.getElementById('reservaModal').classList.add('active');\r\n                        console.log('\u2705 Modal de reserva aberto');\r\n                    }\r\n\r\n                    async function handleReservaSubmit(e) {\r\n                        console.log('\ud83d\udd25 handleReservaSubmit CHAMADO!', e);\r\n                        e.preventDefault();\r\n                        \r\n                        try {\r\n                            console.log('\ud83d\udcdd Iniciando processo de reserva...');\r\n                            \r\n                            \/\/ Obter usu\u00e1rio da sess\u00e3o do Appwrite\r\n                            const session = await account.get();\r\n                            const prefs = await account.getPrefs();\r\n                            const user = {\r\n                                id: session.$id,\r\n                                name: session.name,\r\n                                email: session.email,\r\n                                phone: prefs.phone || ''\r\n                            };\r\n                            \r\n                            console.log('\ud83d\udc64 Usu\u00e1rio:', user.name, user.email);\r\n                            \r\n                            const productId = document.getElementById('reservaProductId').value;\r\n                            const quantity = parseInt(document.getElementById('reservaQuantity').value);\r\n                            const receipt = document.getElementById('reservaReceipt').files[0];\r\n                            \r\n                            console.log('\ud83d\udcbe Salvando compra - ID do produto:', productId);\r\n                            console.log('\ud83d\udce6 Quantidade:', quantity);\r\n                            console.log('\ud83d\udcc4 Comprovante:', receipt ? receipt.name : 'NENHUM');\r\n                            \r\n                            if (!receipt) {\r\n                                alert('Anexe o comprovante!');\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Validar tipo de arquivo\r\n                            const allowedTypes = ['image\/jpeg', 'image\/jpg', 'image\/png', 'image\/webp', 'application\/pdf'];\r\n                            const allowedExtensions = ['.jpg', '.jpeg', '.png', '.webp', '.pdf'];\r\n                            const fileExtension = receipt.name.toLowerCase().substring(receipt.name.lastIndexOf('.'));\r\n                            \r\n                            if (!allowedTypes.includes(receipt.type) && !allowedExtensions.includes(fileExtension)) {\r\n                                alert('\u274c Tipo de arquivo inv\u00e1lido!\\n\\nFormatos aceitos:\\n\u2022 PDF (.pdf)\\n\u2022 JPEG (.jpg, .jpeg)\\n\u2022 PNG (.png)\\n\u2022 WebP (.webp)');\r\n                                return;\r\n                            }\r\n                            \r\n                            console.log('\u2705 Tipo de arquivo v\u00e1lido:', receipt.type, fileExtension);\r\n                            \r\n                            \/\/ Fazer upload do comprovante para o Appwrite Storage\r\n                            let receiptFileId = null;\r\n                            let receiptUrl = null;\r\n                            let receiptBase64 = null;\r\n                            \r\n                            try {\r\n                                console.log('\ud83d\udce4 Fazendo upload do comprovante para Storage...');\r\n                                const uploadResult = await storage.createFile(\r\n                                    appwriteConfig.bucketId,\r\n                                    'unique()',\r\n                                    receipt\r\n                                );\r\n                                receiptFileId = uploadResult.$id;\r\n                                \/\/ Gerar URL p\u00fablica para visualiza\u00e7\u00e3o\r\n                                receiptUrl = `${appwriteConfig.endpoint}\/storage\/buckets\/${appwriteConfig.bucketId}\/files\/${receiptFileId}\/view?project=${appwriteConfig.projectId}`;\r\n                                console.log('\u2705 Comprovante enviado! File ID:', receiptFileId);\r\n                                console.log('\ud83d\udcce URL:', receiptUrl);\r\n                            } catch (uploadError) {\r\n                                console.warn('\u26a0\ufe0f Erro ao fazer upload do comprovante:', uploadError);\r\n                                console.warn('\u26a0\ufe0f Storage n\u00e3o dispon\u00edvel. Usando base64 como fallback...');\r\n                                \r\n                                \/\/ Fallback: converter arquivo para base64\r\n                                try {\r\n                                    receiptBase64 = await fileToBase64(receipt);\r\n                                    receiptUrl = receiptBase64; \/\/ Usar base64 diretamente\r\n                                    console.log('\u2705 Comprovante convertido para base64 (fallback)');\r\n                                } catch (base64Error) {\r\n                                    console.error('\u274c Erro ao converter arquivo para base64:', base64Error);\r\n                                    alert('\u26a0\ufe0f Erro ao processar comprovante. Tente novamente.');\r\n                                    return;\r\n                                }\r\n                            }\r\n                            \r\n                            const products = await getProducts();\r\n                            const product = products.find(p => (p.$id === productId || p.id === productId));\r\n                            \r\n                            if (!product) {\r\n                                console.error('\u274c Produto n\u00e3o encontrado ao salvar compra:', productId);\r\n                                alert('Erro: Produto n\u00e3o encontrado!');\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Objeto completo com base64 (para localStorage)\r\n                            const purchaseComplete = {\r\n                                id: Date.now(),\r\n                                userId: Math.floor(Math.random() * 1000000), \/\/ ID num\u00e9rico tempor\u00e1rio (Collection espera integer)\r\n                                userName: user.name,\r\n                                userEmail: user.email, \/\/ Adicionar email para rastreio\r\n                                userAppwriteId: user.id, \/\/ Guardar o $id real do Appwrite para refer\u00eancia\r\n                                productId: Date.now() + 1, \/\/ ID num\u00e9rico tempor\u00e1rio\r\n                                productAppwriteId: product.$id || product.id, \/\/ Guardar o $id real\r\n                                productName: product.name,\r\n                                quantity,\r\n                                unitPrice: product.price,\r\n                                total: product.price * quantity,\r\n                                receipt: receipt.name,\r\n                                receiptFileId: receiptFileId || '', \/\/ ID do arquivo no Storage\r\n                                receiptUrl: receiptUrl || '', \/\/ URL de visualiza\u00e7\u00e3o ou base64\r\n                                receiptBase64: receiptBase64 || '', \/\/ Base64 fallback (apenas localStorage)\r\n                                receiptType: receipt.type, \/\/ Tipo MIME para renderiza\u00e7\u00e3o\r\n                                status: 'Pendente',\r\n                                createdAt: new Date().toISOString()\r\n                            };\r\n                            \r\n                            \/\/ Objeto para Appwrite (sem receiptBase64 que n\u00e3o existe na collection)\r\n                            const purchaseForAppwrite = {\r\n                                id: purchaseComplete.id,\r\n                                userId: purchaseComplete.userId,\r\n                                userName: purchaseComplete.userName,\r\n                                userEmail: purchaseComplete.userEmail,\r\n                                userAppwriteId: purchaseComplete.userAppwriteId,\r\n                                productId: purchaseComplete.productId,\r\n                                productAppwriteId: purchaseComplete.productAppwriteId,\r\n                                productName: purchaseComplete.productName,\r\n                                quantity: purchaseComplete.quantity,\r\n                                unitPrice: purchaseComplete.unitPrice,\r\n                                total: purchaseComplete.total,\r\n                                receipt: purchaseComplete.receipt,\r\n                                receiptFileId: purchaseComplete.receiptFileId,\r\n                                receiptUrl: purchaseComplete.receiptUrl,\r\n                                receiptType: purchaseComplete.receiptType,\r\n                                status: purchaseComplete.status,\r\n                                createdAt: purchaseComplete.createdAt\r\n                            };\r\n                            \r\n                            console.log('\ud83d\udcbe Objeto de compra completo (localStorage):', purchaseComplete);\r\n                            console.log('\ud83d\udce4 Objeto de compra para Appwrite (sem base64):', purchaseForAppwrite);\r\n                            \r\n                            \/\/ Validar dados antes de enviar\r\n                            console.log('\\n\ud83d\udd0d Validando dados antes de enviar...');\r\n                            const requiredFields = [\r\n                                'id', 'userId', 'userName', 'userEmail', 'userAppwriteId',\r\n                                'productId', 'productAppwriteId', 'productName',\r\n                                'quantity', 'unitPrice', 'total',\r\n                                'receipt', 'receiptUrl', 'receiptType', 'status', 'createdAt'\r\n                            ];\r\n                            \r\n                            const missingFields = [];\r\n                            for (const field of requiredFields) {\r\n                                if (purchaseForAppwrite[field] === undefined || purchaseForAppwrite[field] === null) {\r\n                                    missingFields.push(field);\r\n                                }\r\n                            }\r\n                            \r\n                            if (missingFields.length > 0) {\r\n                                console.error('\u274c Campos obrigat\u00f3rios faltando:', missingFields);\r\n                                throw new Error('Campos obrigat\u00f3rios faltando: ' + missingFields.join(', '));\r\n                            }\r\n                            \r\n                            console.log('\u2705 Todos os campos obrigat\u00f3rios presentes');\r\n                            console.log('\\n\ud83d\udce4 Enviando para Appwrite...');\r\n                            console.log('Collection ID:', appwriteConfig.collections.purchases);\r\n                            console.log('Database ID:', appwriteConfig.databaseId);\r\n                            \r\n                            \/\/ Salvar no Appwrite (sem base64)\r\n                            const result = await createDocument(appwriteConfig.collections.purchases, purchaseForAppwrite);\r\n                            console.log('\u2705 Compra salva no Appwrite!', result);\r\n                            \r\n                            \/\/ Salvar vers\u00e3o completa no localStorage (com base64)\r\n                            const allPurchases = await getPurchases();\r\n                            allPurchases.push(purchaseComplete);\r\n                            await setPurchases(allPurchases);\r\n                            console.log('\u2705 Compra salva no localStorage com base64!');\r\n                            \r\n                            alert('\u2705 Compra enviada com sucesso! Aguarde a aprova\u00e7\u00e3o do admin.');\r\n                            closeModal('reservaModal');\r\n                            e.target.reset();\r\n                            \r\n                            \/\/ Recarregar (getPurchases sincroniza cache)\r\n                            await loadPurchases();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao salvar compra:', error);\r\n                            \r\n                            let errorMsg = 'Erro ao enviar compra:\\n\\n';\r\n                            \r\n                            if (error.code === 400 && error.message.includes('Invalid document structure')) {\r\n                                errorMsg += '\u26a0\ufe0f ERRO: ATRIBUTO FALTANDO NA COLLECTION\\n\\n';\r\n                                \r\n                                \/\/ Extrair o nome do atributo da mensagem de erro\r\n                                const unknownAttrMatch = error.message.match(\/Unknown attribute:\\s*\"([^\"]+)\"\/);\r\n                                if (unknownAttrMatch) {\r\n                                    const missingAttr = unknownAttrMatch[1];\r\n                                    errorMsg += `\u274c O atributo \"${missingAttr}\" n\u00e3o existe na collection \"purchases\".\\n\\n`;\r\n                                    errorMsg += '\ud83d\udccb INSTRU\u00c7\u00d5ES PARA CORRIGIR:\\n\\n';\r\n                                    errorMsg += '1. Acesse o Appwrite Console\\n';\r\n                                    errorMsg += '2. V\u00e1 em Databases \u2192 Sua Database \u2192 purchases\\n';\r\n                                    errorMsg += '3. Clique em \"Attributes\"\\n';\r\n                                    errorMsg += `4. Clique em \"Create Attribute\"\\n`;\r\n                                    errorMsg += `5. Crie o atributo \"${missingAttr}\" com as configura\u00e7\u00f5es:\\n\\n`;\r\n                                    \r\n                                    \/\/ Especificar o tipo correto baseado no atributo\r\n                                    const attrConfig = {\r\n                                        'userAppwriteId': 'Tipo: String | Tamanho: 255 | Obrigat\u00f3rio: SIM',\r\n                                        'userEmail': 'Tipo: String | Tamanho: 255 | Obrigat\u00f3rio: SIM',\r\n                                        'productAppwriteId': 'Tipo: String | Tamanho: 255 | Obrigat\u00f3rio: SIM',\r\n                                        'receiptFileId': 'Tipo: String | Tamanho: 255 | Obrigat\u00f3rio: N\u00c3O',\r\n                                        'receiptUrl': 'Tipo: String | Tamanho: 2000 | Obrigat\u00f3rio: SIM',\r\n                                        'receiptType': 'Tipo: String | Tamanho: 100 | Obrigat\u00f3rio: SIM',\r\n                                        'approvedAt': 'Tipo: String | Tamanho: 100 | Obrigat\u00f3rio: N\u00c3O',\r\n                                        'rejectedAt': 'Tipo: String | Tamanho: 100 | Obrigat\u00f3rio: N\u00c3O',\r\n                                        'rejectionReason': 'Tipo: String | Tamanho: 500 | Obrigat\u00f3rio: N\u00c3O'\r\n                                    };\r\n                                    \r\n                                    if (attrConfig[missingAttr]) {\r\n                                        errorMsg += `   ${attrConfig[missingAttr]}\\n\\n`;\r\n                                    } else {\r\n                                        errorMsg += `   Consulte o arquivo APPWRITE_COLLECTIONS_SCHEMA.md\\n\\n`;\r\n                                    }\r\n                                    \r\n                                    errorMsg += '6. Salve o atributo e tente novamente\\n\\n';\r\n                                    errorMsg += '\ud83d\udca1 DICA: Consulte o arquivo APPWRITE_COLLECTIONS_SCHEMA.md\\n';\r\n                                    errorMsg += 'para ver TODOS os atributos necess\u00e1rios.';\r\n                                } else {\r\n                                    errorMsg += 'A collection \"purchases\" no Appwrite tem atributos incompat\u00edveis.\\n\\n';\r\n                                    errorMsg += '\ud83d\udccb Consulte o arquivo APPWRITE_COLLECTIONS_SCHEMA.md\\n';\r\n                                    errorMsg += 'para ver a lista completa de atributos necess\u00e1rios.\\n\\n';\r\n                                    errorMsg += 'Detalhes: ' + error.message;\r\n                                }\r\n                            } else {\r\n                                errorMsg += error.message;\r\n                            }\r\n                            \r\n                            alert(errorMsg);\r\n                        }\r\n                    }\r\n\r\n                    async function loadPurchases() {\r\n                        try {\r\n                            console.log('\ud83d\udd04 Carregando hist\u00f3rico de compras...');\r\n                            const session = await account.get();\r\n                            const userId = session.$id;\r\n                            const userEmail = (session.email || '').toLowerCase();\r\n\r\n                            const allPurchases = await getPurchases();\r\n                            \/\/ Considerar m\u00faltiplas chaves de identifica\u00e7\u00e3o (dados podem ter sido salvos com formatos diferentes)\r\n                            const purchases = allPurchases.filter(p => {\r\n                                const pidAppwrite = p.userAppwriteId || p.userIdAppwrite || p.$userId;\r\n                                const pidNumeric = typeof p.userId === 'number' ? String(p.userId) : (p.userId || '').toString();\r\n                                const pEmail = (p.userEmail || '').toLowerCase();\r\n                                return (\r\n                                    pidAppwrite === userId ||\r\n                                    pidNumeric === userId ||\r\n                                    (pEmail && userEmail && pEmail === userEmail)\r\n                                );\r\n                            });\r\n                            const purchasesList = document.getElementById('purchasesList');\r\n                            \r\n                            console.log('\ud83d\udc64 Usu\u00e1rio atual:', userId);\r\n                            console.log('\ud83d\udce6 Total de compras no sistema:', allPurchases.length);\r\n                            console.log('\ud83d\uded2 Minhas compras:', purchases.length);\r\n                            console.log('\ud83d\udccb Lista de compras:', purchases);\r\n                            \r\n                            if (!purchasesList) {\r\n                                console.error('\u274c Elemento purchasesList n\u00e3o encontrado!');\r\n                                return;\r\n                            }\r\n                            \r\n                            console.log('\u2705 Elemento purchasesList encontrado, atualizando DOM...');\r\n                            \r\n                            if (purchases.length === 0) {\r\n                                purchasesList.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Nenhuma compra realizada<\/p>';\r\n                                console.log('\u2139\ufe0f Nenhuma compra para exibir');\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Buscar vendas para calcular quantidade enviada\r\n                            const sales = await getSales();\r\n                            \r\n                            \/\/ Buscar produtos para obter imagens\r\n                            const products = await getProducts();\r\n                            \r\n                            purchasesList.innerHTML = `\r\n                                <div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: 20px;\">\r\n                                    ${purchases.map(p => {\r\n                                    const statusLower = p.status.toLowerCase();\r\n                                    const sentFromThisPurchase = sales.filter(s => s.purchaseId === p.id);\r\n                                    const totalSent = sentFromThisPurchase.reduce((sum, s) => sum + s.quantity, 0);\r\n                                    const remainingQty = p.quantity - totalSent;\r\n                                    \r\n                                    \/\/ Buscar imagem do produto\r\n                                    const product = products.find(prod => prod.$id === p.productAppwriteId || prod.id === p.productId);\r\n                                    const productImage = product?.image || getPlaceholderDataURI('Produto', 400, 300);\r\n                                    \r\n                                    return `\r\n                                    <div class=\"card\" style=\"padding: 0; overflow: hidden;\">\r\n                                        <img decoding=\"async\" \r\n                                            src=\"${productImage}\" \r\n                                            alt=\"${p.productName}\" \r\n                                            style=\"width: 100%; height: 200px; object-fit: cover;\"\r\n                                            onerror=\"this.src='${getPlaceholderDataURI('Produto', 400, 300)}'\"\r\n                                        >\r\n                                        <div style=\"padding: 20px;\">\r\n                                            <h3 style=\"margin: 0 0 15px 0; font-size: 18px; color: #1f2937;\">${p.productName}<\/h3>\r\n                                            \r\n                                            <div class=\"card-info\" style=\"margin-bottom: 15px;\">\r\n                                                <div class=\"card-info-item\">\r\n                                                    <span class=\"label\">\ud83d\udce6 Quantidade Total Comprada:<\/span>\r\n                                                    <span class=\"value\"><strong style=\"font-size: 18px; color: #059669;\">${p.quantity} unidades<\/strong><\/span>\r\n                                                <\/div>\r\n                                                <div class=\"card-info-item\">\r\n                                                    <span class=\"label\">\u2705 J\u00e1 Enviado:<\/span>\r\n                                                    <span class=\"value\" style=\"color: ${totalSent > 0 ? '#059669' : '#6b7280'}; font-weight: ${totalSent > 0 ? 'bold' : 'normal'};\">\r\n                                                        ${totalSent} unidades ${totalSent > 0 ? '\u2705' : ''}\r\n                                                    <\/span>\r\n                                                <\/div>\r\n                                                <div class=\"card-info-item\">\r\n                                                    <span class=\"label\">\ud83d\udcb0 Total Pago:<\/span>\r\n                                                    <span class=\"value\">R$ ${formatCurrency(p.total)}<\/span>\r\n                                                <\/div>\r\n                                                <div class=\"card-info-item\">\r\n                                                    <span class=\"label\">\ud83d\udcc5 Data da Compra:<\/span>\r\n                                                    <span class=\"value\">${formatDate(p.createdAt)}<\/span>\r\n                                                <\/div>\r\n                                                <div class=\"card-info-item\">\r\n                                                    <span class=\"label\">Status:<\/span>\r\n                                                    <span class=\"value\"><span class=\"badge badge-${statusLower}\">${p.status}<\/span><\/span>\r\n                                                <\/div>\r\n                                            <\/div>\r\n                                            \r\n                                            ${p.status === 'Aprovada' && remainingQty > 0 ? `\r\n                                                <div style=\"background: #f0fdf4; padding: 15px; border-radius: 8px; margin-bottom: 15px; border: 2px solid #86efac;\">\r\n                                                    <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;\">\r\n                                                        <label style=\"font-weight: 600; color: #15803d; margin: 0;\">\ud83d\udcee Quantidade a Enviar:<\/label>\r\n                                                        <input \r\n                                                            type=\"number\" \r\n                                                            id=\"qtdEnviar_${p.id}\" \r\n                                                            value=\"0\" \r\n                                                            min=\"0\" \r\n                                                            max=\"${remainingQty}\" \r\n                                                            style=\"width: 80px; padding: 8px; border: 2px solid #86efac; border-radius: 6px; font-size: 16px; font-weight: bold; text-align: center;\"\r\n                                                        >\r\n                                                    <\/div>\r\n                                                    <p style=\"margin: 0; font-size: 13px; color: #15803d;\">\r\n                                                        \ud83d\udca1 Voc\u00ea ainda pode enviar at\u00e9 <strong>${remainingQty} unidades<\/strong>\r\n                                                    <\/p>\r\n                                                <\/div>\r\n                                            ` : p.status === 'Aprovada' && remainingQty === 0 ? `\r\n                                                <div style=\"background: #dcfce7; padding: 15px; border-radius: 8px; margin-bottom: 15px; text-align: center;\">\r\n                                                    <p style=\"margin: 0; color: #15803d; font-weight: 600;\">\u2705 Tudo enviado!<\/p>\r\n                                                <\/div>\r\n                                            ` : ''}\r\n                                            \r\n                                            <div style=\"display: flex; gap: 10px; flex-wrap: wrap;\">\r\n                                                <button class=\"btn btn-primary btn-small\" onclick=\"viewReceipt(${p.id})\" style=\"flex: 1;\">\r\n                                                    \ud83d\udcc4 Ver Comprovante\r\n                                                <\/button>\r\n                                                ${p.status === 'Aprovada' && remainingQty > 0 ? `\r\n                                                    <button class=\"btn btn-success btn-small\" onclick=\"openSendPurchaseModalWithQty(${p.id})\" style=\"flex: 1;\">\r\n                                                        \ud83d\udce6 Registrar Envio\r\n                                                    <\/button>\r\n                                                ` : ''}\r\n                                                ${p.status === 'Aprovada' && totalSent > 0 ? `\r\n                                                    <button class=\"btn btn-warning btn-small\" onclick=\"requestReturn(${p.id}, '${p.productAppwriteId || p.productId}', ${p.quantity}, '${p.productName}')\" style=\"flex: 1;\">\r\n                                                        \u21a9\ufe0f Solicitar Retorno\r\n                                                    <\/button>\r\n                                                ` : ''}\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                    `;\r\n                                }).join('')}\r\n                            <\/div>\r\n                        `;\r\n                        console.log('\u2705 Hist\u00f3rico de compras atualizado na tela!');\r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao carregar compras:', error);\r\n                            if (handleAuthError(error)) return;\r\n                            const purchasesList = document.getElementById('purchasesList');\r\n                            if (purchasesList) {\r\n                                purchasesList.innerHTML = '<p style=\"text-align:center;color:#ef4444;\">\u274c Erro ao carregar compras. Tente novamente.<\/p>';\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    async function viewReceipt(purchaseId) {\r\n                        const purchases = await getPurchases();\r\n                        const purchase = purchases.find(p => p.id === purchaseId);\r\n                        if (!purchase) {\r\n                            alert('Compra n\u00e3o encontrada!');\r\n                            return;\r\n                        }\r\n                        \r\n                        document.getElementById('receiptContent').innerHTML = `\r\n                            <div style=\"background: #f0f9ff; padding: 15px; border-radius: 8px; margin-bottom: 20px;\">\r\n                                <h3 style=\"margin-top: 0; color: #1e40af;\">\ud83d\udc64 Informa\u00e7\u00f5es do Cliente<\/h3>\r\n                                <div class=\"card-info\">\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">Nome:<\/span>\r\n                                        <span class=\"value\"><strong>${purchase.userName || 'N\u00e3o informado'}<\/strong><\/span>\r\n                                    <\/div>\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">Email:<\/span>\r\n                                        <span class=\"value\">${purchase.userEmail || 'N\u00e3o informado'}<\/span>\r\n                                    <\/div>\r\n                                    ${purchase.userAppwriteId ? `\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">ID Appwrite:<\/span>\r\n                                        <span class=\"value\" style=\"font-size: 11px; font-family: monospace;\">${purchase.userAppwriteId}<\/span>\r\n                                    <\/div>\r\n                                    ` : ''}\r\n                                <\/div>\r\n                            <\/div>\r\n                            \r\n                            <div style=\"background: #f0fdf4; padding: 15px; border-radius: 8px; margin-bottom: 20px;\">\r\n                                <h3 style=\"margin-top: 0; color: #15803d;\">\ud83d\uded2 Detalhes da Compra<\/h3>\r\n                                <div class=\"card-info\">\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">Produto:<\/span>\r\n                                        <span class=\"value\"><strong>${purchase.productName}<\/strong><\/span>\r\n                                    <\/div>\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">Quantidade:<\/span>\r\n                                        <span class=\"value\">${purchase.quantity} unidades<\/span>\r\n                                    <\/div>\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">Valor Unit\u00e1rio:<\/span>\r\n                                        <span class=\"value\">R$ ${formatCurrency(purchase.unitPrice)}<\/span>\r\n                                    <\/div>\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">Total:<\/span>\r\n                                        <span class=\"value\"><strong style=\"font-size: 1.2em; color: #15803d;\">R$ ${formatCurrency(purchase.total)}<\/strong><\/span>\r\n                                    <\/div>\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">Status:<\/span>\r\n                                        <span class=\"value\">\r\n                                            <span class=\"badge badge-${purchase.status === 'Aprovada' ? 'success' : purchase.status === 'Rejeitada' ? 'danger' : 'warning'}\">\r\n                                                ${purchase.status}\r\n                                            <\/span>\r\n                                        <\/span>\r\n                                    <\/div>\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">Data:<\/span>\r\n                                        <span class=\"value\">${formatDate(purchase.createdAt)}<\/span>\r\n                                    <\/div>\r\n                            <div style=\"background: #fef9c3; padding: 15px; border-radius: 8px;\">\r\n                                <h3 style=\"margin-top: 0; color: #854d0e;\">\ud83d\udcc4 Comprovante de Pagamento<\/h3>\r\n                                <div class=\"card-info\">\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">Arquivo:<\/span>\r\n                                        <span class=\"value\"><strong>${purchase.receipt}<\/strong><\/span>\r\n                                    <\/div>\r\n                                    ${purchase.receiptType ? `\r\n                                    <div class=\"card-info-item\">\r\n                                        <span class=\"label\">Tipo:<\/span>\r\n                                        <span class=\"value\">${purchase.receiptType}<\/span>\r\n                                    <\/div>\r\n                                    ` : ''}\r\n                                <\/div>\r\n                                \r\n                                ${(purchase.receiptUrl || purchase.receiptBase64) ? `\r\n                                    <div style=\"margin-top: 15px;\">\r\n                                        ${purchase.receiptType === 'application\/pdf' ? `\r\n                                            <iframe \r\n                                                src=\"${purchase.receiptUrl || purchase.receiptBase64}\" \r\n                                                style=\"width: 100%; height: 600px; border: 2px solid #ddd; border-radius: 8px;\"\r\n                                                title=\"Visualizador de PDF\"\r\n                                                onload=\"console.log('\u2705 PDF carregado com sucesso')\"\r\n                                                onerror=\"console.error('\u274c Erro ao carregar PDF'); this.style.display='none'; this.nextElementSibling.style.display='block';\">\r\n                                            <\/iframe>\r\n                                            <div style=\"display: none; padding: 20px; background: #fee; border: 2px solid #fcc; border-radius: 8px; text-align: center;\">\r\n                                                <p style=\"color: #c00; margin: 0;\">\u26a0\ufe0f Erro ao carregar PDF. O bucket do Appwrite Storage pode n\u00e3o estar configurado.<\/p>\r\n                                                <p style=\"margin: 10px 0 0 0; font-size: 13px;\"><strong>Solu\u00e7\u00e3o:<\/strong> Configure o Storage no Appwrite Console.<\/p>\r\n                                            <\/div>\r\n                                            <div style=\"margin-top: 10px; text-align: center;\">\r\n                                                <a href=\"${purchase.receiptUrl || purchase.receiptBase64}\" download=\"${purchase.receipt}\" class=\"btn btn-primary\">\r\n                                                    \ud83d\udce5 Download PDF\r\n                                                <\/a>\r\n                                            <\/div>\r\n                                        ` : purchase.receiptType && purchase.receiptType.startsWith('image\/') ? `\r\n                                            <img decoding=\"async\" \r\n                                                src=\"${purchase.receiptUrl || purchase.receiptBase64}\" \r\n                                                alt=\"Comprovante\" \r\n                                                style=\"max-width: 100%; height: auto; border: 2px solid #ddd; border-radius: 8px; display: block; margin: 0 auto; cursor: pointer;\"\r\n                                                onclick=\"window.open('${purchase.receiptUrl || purchase.receiptBase64}', '_blank')\"\r\n                                                title=\"Clique para ampliar\"\r\n                                                onerror=\"this.style.display='none'; this.nextElementSibling.style.display='block';\">\r\n                                            <div style=\"display: none; padding: 20px; background: #fee; border: 2px solid #fcc; border-radius: 8px; text-align: center;\">\r\n                                                <p style=\"color: #c00; margin: 0;\">\u26a0\ufe0f Erro ao carregar imagem<\/p>\r\n                                            <\/div>\r\n                                            <div style=\"margin-top: 10px; text-align: center;\">\r\n                                                <a href=\"${purchase.receiptUrl || purchase.receiptBase64}\" download=\"${purchase.receipt}\" class=\"btn btn-primary\">\r\n                                                    \ud83d\udd0d Download imagem\r\n                                                <\/a>\r\n                                            <\/div>\r\n                                        ` : `\r\n                                            <a href=\"${purchase.receiptUrl || purchase.receiptBase64}\" download=\"${purchase.receipt}\" class=\"btn btn-primary\" style=\"display: inline-block;\">\r\n                                                \ud83d\udce5 Download do arquivo\r\n                                            <\/a>\r\n                                        `}\r\n                                    <\/div>\r\n                                ` : `\r\n                                    <p style=\"margin: 10px 0 0 0; color: #666; font-size: 13px;\">\r\n                                        \ud83d\udca1 Arquivo n\u00e3o dispon\u00edvel para visualiza\u00e7\u00e3o (upload n\u00e3o realizado ou vers\u00e3o antiga).\r\n                                    <\/p>\r\n                                `}\r\n                            <\/div>\r\n                            \r\n                            ${purchase.status === 'Rejeitada' && purchase.rejectionReason ? `\r\n                            <div style=\"background: #fee; padding: 15px; border-radius: 8px; margin-top: 15px; border-left: 4px solid #dc2626;\">\r\n                                <h3 style=\"margin-top: 0; color: #dc2626;\">\u274c Motivo da Rejei\u00e7\u00e3o<\/h3>\r\n                                <p style=\"margin: 0; color: #991b1b;\"><strong>${purchase.rejectionReason}<\/strong><\/p>\r\n                            <\/div>\r\n                            ` : ''}\r\n                        `;\r\n                        \r\n                        document.getElementById('receiptModal').classList.add('active');\r\n                    }\r\n\r\n                    async function loadStock() {\r\n                        const session = await account.get();\r\n                        const user = { id: session.$id, name: session.name };\r\n                        const stock = (await getStock()).filter(s => s.userAppwriteId === user.id);\r\n                        const stockList = document.getElementById('stockList');\r\n                        \r\n                        \/\/ Verificar alertas de estoque\r\n                        await checkStockAlerts();\r\n                        \r\n                        if (!stockList) return;\r\n                        \r\n                        if (stock.length === 0) {\r\n                            stockList.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Estoque vazio<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        stockList.innerHTML = `\r\n                            <table>\r\n                                <thead>\r\n                                    <tr>\r\n                                        <th>Produto<\/th>\r\n                                        <th>Quantidade<\/th>\r\n                                        <th>A\u00e7\u00f5es<\/th>\r\n                                    <\/tr>\r\n                                <\/thead>\r\n                                <tbody>\r\n                                    ${stock.map(s => {\r\n                                        const rowClass = s.quantity <= 10 ? ' style=\"background: #fef3c7;\"' : '';\r\n                                        const btnDisabled = s.quantity === 0 ? ' disabled' : '';\r\n                                        return `\r\n                                        <tr${rowClass}>\r\n                                            <td>${s.productName}<\/td>\r\n                                            <td>${s.quantity}<\/td>\r\n                                            <td><button class=\"btn btn-success\" style=\"font-size: 12px; padding: 6px 12px;\" onclick=\"openStockSendModal(${s.id})\"${btnDisabled}>Enviar<\/button><\/td>\r\n                                        <\/tr>\r\n                                        `;\r\n                                    }).join('')}\r\n                                <\/tbody>\r\n                            <\/table>\r\n                        `;\r\n                    }\r\n\r\n                    async function openStockSendModal(stockId) {\r\n                        const stock = await getStock();\r\n                        const stockItem = stock.find(s => s.id === stockId);\r\n                        if (!stockItem) return;\r\n                        \r\n                        document.getElementById('stockSendId').value = stockItem.id;\r\n                        document.getElementById('stockSendProduct').value = stockItem.productName;\r\n                        document.getElementById('stockSendAvailable').value = stockItem.quantity;\r\n                        document.getElementById('stockSendQuantity').value = 1;\r\n                        document.getElementById('stockSendQuantity').max = stockItem.quantity;\r\n                        \r\n                        document.getElementById('stockSendModal').classList.add('active');\r\n                    }\r\n\r\n                    async function openSendPurchaseModalWithQty(purchaseId) {\r\n                        \/\/ Pegar a quantidade definida pelo usu\u00e1rio no card\r\n                        const inputQty = document.getElementById(`qtdEnviar_${purchaseId}`);\r\n                        const quantityToSend = inputQty ? parseInt(inputQty.value) : 0;\r\n                        \r\n                        if (quantityToSend <= 0) {\r\n                            alert('\u274c Por favor, defina a quantidade que deseja enviar (maior que zero).');\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Abrir modal com a quantidade j\u00e1 definida\r\n                        await openSendPurchaseModal(purchaseId, quantityToSend);\r\n                    }\r\n\r\n                    async function requestReturn(purchaseId, productId, totalQuantity, productName) {\r\n                        try {\r\n                            console.log('\u21a9\ufe0f Solicitando retorno:', { purchaseId, productId, totalQuantity, productName });\r\n                            \r\n                            const session = await account.get();\r\n                            const user = { id: session.$id, name: session.name };\r\n                            \r\n                            \/\/ Buscar vendas relacionadas a esta compra\r\n                            const sales = await getSales();\r\n                            const sentFromThisPurchase = sales.filter(s => s.purchaseId === purchaseId);\r\n                            \r\n                            if (sentFromThisPurchase.length === 0) {\r\n                                alert('\u274c Nenhum envio registrado para esta compra!');\r\n                                return;\r\n                            }\r\n                            \r\n                            const totalSent = sentFromThisPurchase.reduce((sum, s) => sum + s.quantity, 0);\r\n                            \r\n                            \/\/ Buscar o estoque do cliente para este produto\r\n                            const allStock = await getStock();\r\n                            const userStock = allStock.find(s => \r\n                                (s.productAppwriteId === productId || s.productId === productId) && \r\n                                s.userAppwriteId === user.id\r\n                            );\r\n                            \r\n                            const currentUserStock = userStock ? userStock.quantity : 0;\r\n                            \r\n                            \/\/ Confirmar com o usu\u00e1rio\r\n                            const confirmMsg = `\u26a0\ufe0f Confirmar solicita\u00e7\u00e3o de retorno?\\n\\n` +\r\n                                            `Produto: ${productName}\\n` +\r\n                                            `Quantidade enviada: ${totalSent} unidades\\n` +\r\n                                            `Seu estoque atual: ${currentUserStock} unidades\\n\\n` +\r\n                                            `IMPORTANTE:\\n` +\r\n                                            `\u2022 Sua solicita\u00e7\u00e3o ser\u00e1 enviada para aprova\u00e7\u00e3o do administrador\\n` +\r\n                                            `\u2022 Ap\u00f3s aprova\u00e7\u00e3o, ${totalSent} unidades ser\u00e3o devolvidas ao SEU estoque\\n` +\r\n                                            `\u2022 Voc\u00ea ser\u00e1 notificado quando o retorno for processado\\n\\n` +\r\n                                            `Deseja enviar a solicita\u00e7\u00e3o?`;\r\n                            \r\n                            if (!confirm(confirmMsg)) {\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Criar solicita\u00e7\u00e3o de retorno\r\n                            const returnRequest = {\r\n                                id: Date.now(),\r\n                                purchaseId: purchaseId,\r\n                                productId: productId,\r\n                                productName: productName,\r\n                                quantity: totalSent,\r\n                                userId: user.id,\r\n                                userName: user.name,\r\n                                currentUserStock: currentUserStock,\r\n                                status: 'Pendente',\r\n                                requestedAt: new Date().toISOString(),\r\n                                salesIds: sentFromThisPurchase.map(s => s.id)\r\n                            };\r\n                            \r\n                            console.log('\ud83d\udcdd Criando solicita\u00e7\u00e3o de retorno:', returnRequest);\r\n                            \r\n                            \/\/ Salvar no Appwrite\r\n                            if (appwriteConfig.collections.returns && appwriteConfig.collections.returns !== 'returns_local') {\r\n                                try {\r\n                                    const docData = {\r\n                                        ...returnRequest,\r\n                                        salesIds: JSON.stringify(returnRequest.salesIds)\r\n                                    };\r\n                                    console.log('\ud83d\udce4 Enviando para Appwrite:', docData);\r\n                                    console.log('\ud83d\udccb Collection ID:', appwriteConfig.collections.returns);\r\n                                    \r\n                                    const createdDoc = await createDocument(appwriteConfig.collections.returns, docData);\r\n                                    console.log('\u2705 Solicita\u00e7\u00e3o salva no Appwrite:', createdDoc);\r\n                                    \r\n                                    \/\/ Atualizar o returnRequest com o $id do Appwrite\r\n                                    returnRequest.$id = createdDoc.$id;\r\n                                } catch (appwriteError) {\r\n                                    console.error('\u274c ERRO ao salvar no Appwrite:', appwriteError);\r\n                                    console.error('\u274c Detalhes:', appwriteError.message);\r\n                                    console.error('\u274c C\u00f3digo:', appwriteError.code);\r\n                                    console.log('\ud83d\udcbe Salvando apenas no localStorage como fallback');\r\n                                }\r\n                            } else {\r\n                                console.log('\u26a0\ufe0f Appwrite n\u00e3o configurado, usando apenas localStorage');\r\n                            }\r\n                            \r\n                            \/\/ Salvar no localStorage\r\n                            const returns = await getReturns();\r\n                            console.log('\ud83d\udce6 Retornos antes de adicionar:', returns);\r\n                            returns.push(returnRequest);\r\n                            console.log('\ud83d\udce6 Retornos depois de adicionar:', returns);\r\n                            await setReturns(returns);\r\n                            console.log('\u2705 Solicita\u00e7\u00e3o salva no localStorage');\r\n                            \r\n                            \/\/ Verificar se foi salvo\r\n                            const verificacao = await getReturns();\r\n                            console.log('\ud83d\udd0d Verifica\u00e7\u00e3o ap\u00f3s salvar:', verificacao);\r\n                            \r\n                            alert(`\u2705 Solicita\u00e7\u00e3o de retorno enviada com sucesso!\\n\\n` +\r\n                                `Produto: ${productName}\\n` +\r\n                                `Quantidade: ${totalSent} unidades\\n\\n` +\r\n                                `Status: Aguardando aprova\u00e7\u00e3o do administrador\\n\\n` +\r\n                                `Voc\u00ea ser\u00e1 notificado assim que o retorno for processado.`);\r\n                            \r\n                            \/\/ Recarregar as compras\r\n                            await loadPurchases();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao solicitar retorno:', error);\r\n                            alert('\u274c Erro ao solicitar retorno: ' + error.message);\r\n                        }\r\n                    }\r\n                    \r\n                    async function openSendPurchaseModal(purchaseId, presetQuantity = null) {\r\n                        const purchases = await getPurchases();\r\n                        const purchase = purchases.find(p => p.id === purchaseId);\r\n                        \r\n                        if (!purchase) {\r\n                            alert('Compra n\u00e3o encontrada!');\r\n                            return;\r\n                        }\r\n                        \r\n                        if (purchase.status !== 'Aprovada') {\r\n                            alert('Apenas compras aprovadas podem ser enviadas!');\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Verificar quantidade j\u00e1 enviada\r\n                        const sales = await getSales();\r\n                        const sentFromThisPurchase = sales.filter(s => s.purchaseId === purchaseId);\r\n                        const totalSent = sentFromThisPurchase.reduce((sum, s) => sum + s.quantity, 0);\r\n                        const remainingQty = purchase.quantity - totalSent;\r\n                        \r\n                        if (remainingQty <= 0) {\r\n                            alert('\u2705 Todo o pedido j\u00e1 foi enviado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Se foi passada uma quantidade definida, validar\r\n                        if (presetQuantity !== null && presetQuantity > remainingQty) {\r\n                            alert(`\u274c Quantidade inv\u00e1lida! Voc\u00ea s\u00f3 pode enviar at\u00e9 ${remainingQty} unidades.`);\r\n                            return;\r\n                        }\r\n                        \r\n                        document.getElementById('sendPurchaseId').value = purchase.id;\r\n                        document.getElementById('sendPurchaseProduct').value = purchase.productName;\r\n                        document.getElementById('sendPurchaseTotalQty').value = `${remainingQty} (de ${purchase.quantity} compradas)`;\r\n                        document.getElementById('sendPurchaseQuantity').max = remainingQty;\r\n                        document.getElementById('sendPurchaseQuantity').value = presetQuantity !== null ? presetQuantity : remainingQty;\r\n                        \r\n                        document.getElementById('sendPurchaseModal').classList.add('active');\r\n                        \r\n                        \/\/ Anexar listener ao formul\u00e1rio\r\n                        const form = document.getElementById('sendPurchaseForm');\r\n                        form.removeEventListener('submit', handleSendPurchaseSubmit);\r\n                        form.addEventListener('submit', handleSendPurchaseSubmit);\r\n                    }\r\n                    \r\n                    async function handleSendPurchaseSubmit(e) {\r\n                        console.log('\ud83d\udd25 handleSendPurchaseSubmit CHAMADO!', e);\r\n                        e.preventDefault();\r\n                        \r\n                        try {\r\n                            console.log('\ud83d\udcdd Iniciando processo de registro de envio...');\r\n                            \r\n                            \/\/ Obter usu\u00e1rio da sess\u00e3o do Appwrite\r\n                            const session = await account.get();\r\n                            const prefs = await account.getPrefs();\r\n                            const user = {\r\n                                id: session.$id,\r\n                                name: session.name,\r\n                                email: session.email,\r\n                                phone: prefs.phone || ''\r\n                            };\r\n                            \r\n                            console.log('\ud83d\udc64 Usu\u00e1rio:', user.name, user.email);\r\n                            \r\n                            const purchaseId = parseInt(document.getElementById('sendPurchaseId').value);\r\n                            const quantity = parseInt(document.getElementById('sendPurchaseQuantity').value);\r\n                            const labelFile = document.getElementById('sendPurchaseLabel').files[0];\r\n                            \r\n                            console.log('\ud83d\udcbe Registrando envio - ID da compra:', purchaseId);\r\n                            console.log('\ud83d\udce6 Quantidade:', quantity);\r\n                            console.log('\ud83c\udff7\ufe0f Etiqueta:', labelFile ? labelFile.name : 'NENHUMA');\r\n                            \r\n                            if (!labelFile) {\r\n                                alert('\u274c Anexe a etiqueta de envio!');\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Validar tipo de arquivo\r\n                            const allowedTypes = ['image\/jpeg', 'image\/jpg', 'image\/png', 'image\/webp', 'application\/pdf'];\r\n                            const allowedExtensions = ['.jpg', '.jpeg', '.png', '.webp', '.pdf'];\r\n                            const fileExtension = labelFile.name.toLowerCase().substring(labelFile.name.lastIndexOf('.'));\r\n                            \r\n                            if (!allowedTypes.includes(labelFile.type) && !allowedExtensions.includes(fileExtension)) {\r\n                                alert('\u274c Tipo de arquivo inv\u00e1lido!\\n\\nFormatos aceitos:\\n\u2022 PDF (.pdf)\\n\u2022 JPEG (.jpg, .jpeg)\\n\u2022 PNG (.png)\\n\u2022 WebP (.webp)');\r\n                                return;\r\n                            }\r\n                            \r\n                            console.log('\u2705 Tipo de arquivo v\u00e1lido:', labelFile.type, fileExtension);\r\n                            \r\n                            \/\/ Buscar a compra\r\n                            const purchases = await getPurchases();\r\n                            const purchase = purchases.find(p => p.id === purchaseId);\r\n                            \r\n                            if (!purchase) {\r\n                                console.error('\u274c Compra n\u00e3o encontrada:', purchaseId);\r\n                                alert('Compra n\u00e3o encontrada!');\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Verificar quantidade dispon\u00edvel\r\n                            const sales = await getSales();\r\n                            const sentFromThisPurchase = sales.filter(s => s.purchaseId === purchaseId);\r\n                            const totalSent = sentFromThisPurchase.reduce((sum, s) => sum + s.quantity, 0);\r\n                            const remainingQty = purchase.quantity - totalSent;\r\n                            \r\n                            if (quantity > remainingQty) {\r\n                                alert(`\u274c Quantidade inv\u00e1lida! Voc\u00ea s\u00f3 pode enviar ${remainingQty} unidades.`);\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Fazer upload da etiqueta para o Appwrite Storage\r\n                            let labelFileId = null;\r\n                            let labelUrl = null;\r\n                            let labelBase64 = null;\r\n                            \r\n                            try {\r\n                                console.log('\ud83d\udce4 Fazendo upload da etiqueta para Storage...');\r\n                                const uploadResult = await storage.createFile(\r\n                                    appwriteConfig.bucketId,\r\n                                    'unique()',\r\n                                    labelFile\r\n                                );\r\n                                labelFileId = uploadResult.$id;\r\n                                \/\/ Gerar URL p\u00fablica para visualiza\u00e7\u00e3o\r\n                                labelUrl = `${appwriteConfig.endpoint}\/storage\/buckets\/${appwriteConfig.bucketId}\/files\/${labelFileId}\/view?project=${appwriteConfig.projectId}`;\r\n                                console.log('\u2705 Etiqueta enviada! File ID:', labelFileId);\r\n                                console.log('\ud83d\udcce URL:', labelUrl);\r\n                            } catch (uploadError) {\r\n                                console.warn('\u26a0\ufe0f Erro ao fazer upload da etiqueta:', uploadError);\r\n                                console.warn('\u26a0\ufe0f Storage n\u00e3o dispon\u00edvel. Usando base64 como fallback...');\r\n                                \r\n                                \/\/ Fallback: converter arquivo para base64\r\n                                try {\r\n                                    labelBase64 = await fileToBase64(labelFile);\r\n                                    labelUrl = labelBase64; \/\/ Usar base64 diretamente\r\n                                    console.log('\u2705 Etiqueta convertida para base64 (fallback)');\r\n                                } catch (base64Error) {\r\n                                    console.error('\u274c Erro ao converter arquivo para base64:', base64Error);\r\n                                    alert('\u26a0\ufe0f Erro ao processar etiqueta. Tente novamente.');\r\n                                    return;\r\n                                }\r\n                            }\r\n                            \r\n                            \/\/ Objeto completo com base64 (para localStorage)\r\n                            const saleComplete = {\r\n                                id: Date.now(),\r\n                                purchaseId: purchase.id,\r\n                                userId: Math.floor(Math.random() * 1000000), \/\/ ID num\u00e9rico tempor\u00e1rio\r\n                                userAppwriteId: user.id, \/\/ ID real do Appwrite\r\n                                userName: user.name,\r\n                                userEmail: user.email,\r\n                                productId: purchase.productId,\r\n                                productAppwriteId: purchase.productAppwriteId,\r\n                                productName: purchase.productName,\r\n                                quantity,\r\n                                label: labelFile.name,\r\n                                labelFileId: labelFileId || '', \/\/ ID do arquivo no Storage\r\n                                labelUrl: labelUrl || '', \/\/ URL de visualiza\u00e7\u00e3o ou base64\r\n                                labelBase64: labelBase64 || '', \/\/ Base64 fallback (apenas localStorage)\r\n                                labelType: labelFile.type, \/\/ Tipo MIME para renderiza\u00e7\u00e3o\r\n                                status: 'Aguardando Envio',\r\n                                createdAt: new Date().toISOString()\r\n                            };\r\n                            \r\n                            \/\/ Objeto para Appwrite (sem labelBase64 que n\u00e3o existe na collection)\r\n                            const saleForAppwrite = {\r\n                                id: saleComplete.id,\r\n                                purchaseId: saleComplete.purchaseId,\r\n                                userId: saleComplete.userId,\r\n                                userAppwriteId: saleComplete.userAppwriteId,\r\n                                userName: saleComplete.userName,\r\n                                userEmail: saleComplete.userEmail,\r\n                                productId: saleComplete.productId,\r\n                                productAppwriteId: saleComplete.productAppwriteId,\r\n                                productName: saleComplete.productName,\r\n                                quantity: saleComplete.quantity,\r\n                                label: saleComplete.label,\r\n                                labelFileId: saleComplete.labelFileId,\r\n                                labelUrl: saleComplete.labelUrl,\r\n                                labelType: saleComplete.labelType,\r\n                                status: saleComplete.status,\r\n                                createdAt: saleComplete.createdAt\r\n                            };\r\n                            \r\n                            console.log('\ud83d\udcbe Objeto de venda completo (localStorage):', saleComplete);\r\n                            console.log('\ud83d\udce4 Objeto de venda para Appwrite (sem base64):', saleForAppwrite);\r\n                            \r\n                            \/\/ Validar dados antes de enviar\r\n                            console.log('\\n\ud83d\udd0d Validando dados antes de enviar...');\r\n                            const requiredFields = [\r\n                                'id', 'userId', 'userAppwriteId', 'userName', 'userEmail',\r\n                                'productId', 'productAppwriteId', 'productName',\r\n                                'quantity', 'label', 'labelUrl', 'labelType', 'status', 'createdAt'\r\n                            ];\r\n                            \r\n                            const missingFields = [];\r\n                            for (const field of requiredFields) {\r\n                                if (saleForAppwrite[field] === undefined || saleForAppwrite[field] === null) {\r\n                                    missingFields.push(field);\r\n                                }\r\n                            }\r\n                            \r\n                            if (missingFields.length > 0) {\r\n                                console.error('\u274c Campos obrigat\u00f3rios faltando:', missingFields);\r\n                                throw new Error('Campos obrigat\u00f3rios faltando: ' + missingFields.join(', '));\r\n                            }\r\n                            \r\n                            console.log('\u2705 Todos os campos obrigat\u00f3rios presentes');\r\n                            console.log('\\n\ud83d\udce4 Enviando para Appwrite...');\r\n                            console.log('Collection ID:', appwriteConfig.collections.sales);\r\n                            console.log('Database ID:', appwriteConfig.databaseId);\r\n                            \r\n                            \/\/ Salvar no Appwrite (sem base64)\r\n                            const result = await createDocument(appwriteConfig.collections.sales, saleForAppwrite);\r\n                            console.log('\u2705 Venda salva no Appwrite!', result);\r\n                            console.log('\u2705 Appwrite $id retornado:', result.$id);\r\n                            \r\n                            \/\/ IMPORTANTE: Adicionar o $id do Appwrite ao objeto completo\r\n                            saleComplete.$id = result.$id;\r\n                            \r\n                            \/\/ Salvar vers\u00e3o completa no localStorage (com base64 e $id)\r\n                            const localSales = JSON.parse(localStorage.getItem('sales') || '[]');\r\n                            localSales.push(saleComplete);\r\n                            await setSales(localSales);\r\n                            console.log('\u2705 Venda salva no localStorage com base64 e $id!');\r\n                            console.log('\ud83d\udcbe $id no localStorage:', saleComplete.$id);\r\n                            \r\n                            alert('\u2705 Envio registrado com sucesso!\\n\\nQuantidade enviada: ' + quantity + '\\n\\nAguarde a confirma\u00e7\u00e3o do admin.\\n\\n\ud83c\udf1f Salvo com sucesso no servidor!');\r\n                            closeModal('sendPurchaseModal');\r\n                            document.getElementById('sendPurchaseForm').reset();\r\n                            \r\n                            \/\/ Recarregar dados do usu\u00e1rio\r\n                            await loadPurchases();\r\n                            await loadSales();\r\n                            \r\n                            console.log('\ud83d\udd04 Dados do usu\u00e1rio recarregados');\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao processar envio:', error);\r\n                            \r\n                            let errorMsg = 'Erro ao registrar envio:\\n\\n';\r\n                            \r\n                            if (error.code === 400 && error.message.includes('Invalid document structure')) {\r\n                                errorMsg += '\u26a0\ufe0f ERRO: ATRIBUTO FALTANDO NA COLLECTION\\n\\n';\r\n                                \r\n                                \/\/ Extrair o nome do atributo da mensagem de erro\r\n                                const unknownAttrMatch = error.message.match(\/Unknown attribute:\\s*\"([^\"]+)\"\/);\r\n                                if (unknownAttrMatch) {\r\n                                    const missingAttr = unknownAttrMatch[1];\r\n                                    errorMsg += `\u274c O atributo \"${missingAttr}\" n\u00e3o existe na collection \"sales\".\\n\\n`;\r\n                                    errorMsg += '\ud83d\udccb INSTRU\u00c7\u00d5ES PARA CORRIGIR:\\n\\n';\r\n                                    errorMsg += '1. Acesse o Appwrite Console\\n';\r\n                                    errorMsg += '2. V\u00e1 em Databases \u2192 Sua Database \u2192 sales\\n';\r\n                                    errorMsg += '3. Clique em \"Attributes\"\\n';\r\n                                    errorMsg += `4. Clique em \"Create Attribute\"\\n`;\r\n                                    errorMsg += `5. Crie o atributo \"${missingAttr}\" com as configura\u00e7\u00f5es:\\n\\n`;\r\n                                    \r\n                                    \/\/ Especificar o tipo correto baseado no atributo\r\n                                    const attrConfig = {\r\n                                        'userId': 'Tipo: Integer | Obrigat\u00f3rio: SIM',\r\n                                        'userAppwriteId': 'Tipo: String | Tamanho: 255 | Obrigat\u00f3rio: SIM',\r\n                                        'userEmail': 'Tipo: String | Tamanho: 255 | Obrigat\u00f3rio: N\u00c3O',\r\n                                        'productId': 'Tipo: Integer | Obrigat\u00f3rio: SIM',\r\n                                        'productAppwriteId': 'Tipo: String | Tamanho: 255 | Obrigat\u00f3rio: SIM',\r\n                                        'labelFileId': 'Tipo: String | Tamanho: 255 | Obrigat\u00f3rio: SIM',\r\n                                        'labelUrl': 'Tipo: String | Tamanho: 2000 | Obrigat\u00f3rio: SIM',\r\n                                        'labelType': 'Tipo: String | Tamanho: 100 | Obrigat\u00f3rio: SIM',\r\n                                        'status': 'Tipo: String | Tamanho: 50 | Obrigat\u00f3rio: SIM',\r\n                                        'shippedAt': 'Tipo: String | Tamanho: 100 | Obrigat\u00f3rio: N\u00c3O'\r\n                                    };\r\n                                    \r\n                                    if (attrConfig[missingAttr]) {\r\n                                        errorMsg += `   ${attrConfig[missingAttr]}\\n\\n`;\r\n                                    } else {\r\n                                        errorMsg += `   Consulte o arquivo APPWRITE_COLLECTIONS_SCHEMA.md\\n\\n`;\r\n                                    }\r\n                                    \r\n                                    errorMsg += '6. Salve o atributo e tente novamente\\n\\n';\r\n                                    errorMsg += '\ud83d\udca1 DICA: Consulte o arquivo APPWRITE_COLLECTIONS_SCHEMA.md\\n';\r\n                                    errorMsg += 'para ver TODOS os atributos necess\u00e1rios.';\r\n                                } else {\r\n                                    errorMsg += 'A collection \"sales\" no Appwrite tem atributos incompat\u00edveis.\\n\\n';\r\n                                    errorMsg += '\ud83d\udccb Consulte o arquivo APPWRITE_COLLECTIONS_SCHEMA.md\\n';\r\n                                    errorMsg += 'para ver a lista completa de atributos necess\u00e1rios.\\n\\n';\r\n                                    errorMsg += 'Detalhes: ' + error.message;\r\n                                }\r\n                            } else {\r\n                                errorMsg += error.message;\r\n                            }\r\n                            \r\n                            alert(errorMsg);\r\n                        }\r\n                    }\r\n\r\n                    async function handleStockSend(e) {\r\n                        e.preventDefault();\r\n                        \r\n                        const session = await account.get();\r\n                        const user = { id: session.$id, name: session.name };\r\n                        const stockId = parseInt(document.getElementById('stockSendId').value);\r\n                        const quantity = parseInt(document.getElementById('stockSendQuantity').value);\r\n                        const label = document.getElementById('stockSendLabel').files[0];\r\n                        \r\n                        if (!label) {\r\n                            alert('Anexe a etiqueta!');\r\n                            return;\r\n                        }\r\n                        \r\n                        const stock = await getStock();\r\n                        const stockItem = stock.find(s => s.id === stockId);\r\n                        \r\n                        if (stockItem.quantity < quantity) {\r\n                            alert('Quantidade insuficiente!');\r\n                            return;\r\n                        }\r\n                        \r\n                        const newQuantity = stockItem.quantity - quantity;\r\n                        await updateStockQuantity(stockId, newQuantity);\r\n                        \r\n                        const sales = await getSales();\r\n                        const newSale = {\r\n                            id: Date.now(),\r\n                            userId: stockItem.userId,\r\n                            userAppwriteId: user.id,\r\n                            userName: user.name,\r\n                            productId: stockItem.productId,\r\n                            productAppwriteId: stockItem.productAppwriteId,\r\n                            productName: stockItem.productName,\r\n                            quantity,\r\n                            label: label.name,\r\n                            status: 'Aguardando Envio',\r\n                            createdAt: new Date().toISOString()\r\n                        };\r\n                        \r\n                        try {\r\n                            const created = await createDocument(appwriteConfig.collections.sales, newSale);\r\n                            newSale.$id = created.$id;\r\n                            console.log('\u2705 Venda salva no Appwrite!');\r\n                        } catch (error) {\r\n                            console.log('\u26a0\ufe0f Appwrite indispon\u00edvel, salvando apenas no LocalStorage:', error.message);\r\n                        }\r\n                        \r\n                        sales.push(newSale);\r\n                        await setSales(sales);\r\n                        \r\n                        alert('Envio registrado! Aguardando confirma\u00e7\u00e3o do admin.');\r\n                        closeModal('stockSendModal');\r\n                        await loadStock();\r\n                        await loadSales();\r\n                    }\r\n\r\n                    async function loadSales() {\r\n                        const session = await account.get();\r\n                        const userId = session.$id;\r\n                        const userEmail = (session.email || '').toLowerCase();\r\n                        \r\n                        const allSales = await getSales();\r\n                        \/\/ Considerar m\u00faltiplas chaves (registros legados podem n\u00e3o ter userAppwriteId)\r\n                        const sales = allSales.filter(s => {\r\n                            const sidAppwrite = s.userAppwriteId || s.userIdAppwrite || s.$userId;\r\n                            const sidNumeric = typeof s.userId === 'number' ? String(s.userId) : (s.userId || '').toString();\r\n                            const sEmail = (s.userEmail || '').toLowerCase();\r\n                            \r\n                            console.log('\ud83d\udd0d Comparando venda:', {\r\n                                saleId: s.id,\r\n                                status: s.status,\r\n                                sidAppwrite,\r\n                                sidNumeric,\r\n                                sEmail,\r\n                                userId,\r\n                                userEmail,\r\n                                match: sidAppwrite === userId || sidNumeric === userId || (sEmail && userEmail && sEmail === userEmail)\r\n                            });\r\n                            \r\n                            return (\r\n                                sidAppwrite === userId ||\r\n                                sidNumeric === userId ||\r\n                                (sEmail && userEmail && sEmail === userEmail)\r\n                            );\r\n                        });\r\n                        const salesList = document.getElementById('salesList');\r\n                        \r\n                        console.log('\ud83d\udc64 Usu\u00e1rio atual:', userId);\r\n                        console.log('\ud83d\udce6 Total de vendas no sistema:', allSales.length);\r\n                        console.log('\ud83d\udce4 Minhas vendas:', sales.length);\r\n                        console.log('\ud83d\udccb Lista de vendas:', sales);\r\n                        \r\n                        if (!salesList) {\r\n                            console.error('\u274c Elemento salesList n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        if (sales.length === 0) {\r\n                            salesList.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Nenhum pedido vendido<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Buscar usu\u00e1rios para obter informa\u00e7\u00f5es completas\r\n                        const users = await getUsers();\r\n                        \r\n                        salesList.innerHTML = `\r\n                            <table>\r\n                                <thead>\r\n                                    <tr>\r\n                                        <th>Produto<\/th>\r\n                                        <th>Cliente<\/th>\r\n                                        <th>Email<\/th>\r\n                                        <th>Quantidade<\/th>\r\n                                        <th>Status<\/th>\r\n                                        <th>Data<\/th>\r\n                                        <th>A\u00e7\u00f5es<\/th>\r\n                                    <\/tr>\r\n                                <\/thead>\r\n                                <tbody>\r\n                                    ${sales.map(s => {\r\n                                        const badgeClass = s.status === 'Enviado' ? 'enviado' : 'pendente';\r\n                                        const client = users.find(u => u.$id === s.buyerAppwriteId || u.id === s.buyerAppwriteId);\r\n                                        const clientName = s.buyerName || client?.name || 'N\/A';\r\n                                        const clientEmail = s.buyerEmail || client?.email || 'N\/A';\r\n                                        \r\n                                        return `\r\n                                        <tr>\r\n                                            <td>${s.productName}<\/td>\r\n                                            <td><strong>${clientName}<\/strong><\/td>\r\n                                            <td style=\"font-size: 13px; color: #6b7280;\">${clientEmail}<\/td>\r\n                                            <td>${s.quantity}<\/td>\r\n                                            <td><span class=\"badge badge-${badgeClass}\">${s.status}<\/span><\/td>\r\n                                            <td>${formatDate(s.createdAt)}<\/td>\r\n                                            <td><button class=\"btn btn-primary btn-small\" onclick=\"viewSaleLabel(${s.id})\">Ver Etiqueta<\/button><\/td>\r\n                                        <\/tr>\r\n                                        `;\r\n                                    }).join('')}\r\n                                <\/tbody>\r\n                            <\/table>\r\n                        `;\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para carregar solicita\u00e7\u00f5es de retorno do cliente\r\n                    async function loadMyReturns() {\r\n                        console.log('\ud83d\udd04 Carregando minhas solicita\u00e7\u00f5es de retorno...');\r\n                        \r\n                        const session = await account.get();\r\n                        const userId = session.$id;\r\n                        const userEmail = (session.email || '').toLowerCase();\r\n                        const allReturns = await getReturns();\r\n                        \r\n                        \/\/ Filtrar considerando m\u00faltiplas chaves de identifica\u00e7\u00e3o\r\n                        const returns = allReturns.filter(r => {\r\n                            const ridAppwrite = r.userAppwriteId || r.userIdAppwrite || r.$userId;\r\n                            const ridNumeric = typeof r.userId === 'number' ? String(r.userId) : (r.userId || '').toString();\r\n                            const rEmail = (r.userEmail || '').toLowerCase();\r\n                            \r\n                            console.log('\ud83d\udd0d Comparando retorno:', {\r\n                                returnId: r.id,\r\n                                ridAppwrite,\r\n                                ridNumeric,\r\n                                rEmail,\r\n                                userId,\r\n                                userEmail,\r\n                                match: ridAppwrite === userId || ridNumeric === userId || (rEmail && userEmail && rEmail === userEmail)\r\n                            });\r\n                            \r\n                            return (\r\n                                ridAppwrite === userId ||\r\n                                ridNumeric === userId ||\r\n                                (rEmail && userEmail && rEmail === userEmail)\r\n                            );\r\n                        });\r\n                        const list = document.getElementById('myReturnsList');\r\n                        \r\n                        console.log('\ud83d\udc64 Usu\u00e1rio atual:', userId);\r\n                        console.log('\ud83d\udce6 Total de retornos no sistema:', allReturns.length);\r\n                        console.log('\ud83d\udd04 Meus retornos:', returns.length);\r\n                        console.log('\ud83d\udccb Lista completa de retornos:', returns);\r\n                        \r\n                        if (!list) {\r\n                            console.error('\u274c Elemento myReturnsList n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        if (returns.length === 0) {\r\n                            console.log('\u2139\ufe0f Nenhuma solicita\u00e7\u00e3o de retorno para exibir');\r\n                            list.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Voc\u00ea n\u00e3o tem solicita\u00e7\u00f5es de retorno<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Buscar produtos para obter informa\u00e7\u00f5es completas\r\n                        const products = await getProducts();\r\n                        \r\n                        \/\/ Separar por status\r\n                        const pending = returns.filter(r => r.status === 'Pendente');\r\n                        const approved = returns.filter(r => r.status === 'Aprovada');\r\n                        const rejected = returns.filter(r => r.status === 'Rejeitada');\r\n                        \r\n                        list.innerHTML = `\r\n                            <div style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 20px; border-radius: 12px; margin-bottom: 25px; color: white; text-align: center;\">\r\n                                <h3 style=\"margin: 0 0 15px 0;\">\ud83d\udcca Resumo das Solicita\u00e7\u00f5es<\/h3>\r\n                                <div style=\"display: flex; justify-content: space-around; flex-wrap: wrap; gap: 15px;\">\r\n                                    <div style=\"flex: 1; min-width: 150px; background: rgba(250,204,21,0.3); padding: 15px; border-radius: 8px;\">\r\n                                        <div style=\"font-size: 32px; font-weight: bold;\">${pending.length}<\/div>\r\n                                        <div style=\"font-size: 14px; opacity: 0.9;\">\u23f3 Pendentes<\/div>\r\n                                    <\/div>\r\n                                    <div style=\"flex: 1; min-width: 150px; background: rgba(34,197,94,0.3); padding: 15px; border-radius: 8px;\">\r\n                                        <div style=\"font-size: 32px; font-weight: bold;\">${approved.length}<\/div>\r\n                                        <div style=\"font-size: 14px; opacity: 0.9;\">\u2705 Aprovadas<\/div>\r\n                                    <\/div>\r\n                                    <div style=\"flex: 1; min-width: 150px; background: rgba(239,68,68,0.3); padding: 15px; border-radius: 8px;\">\r\n                                        <div style=\"font-size: 32px; font-weight: bold;\">${rejected.length}<\/div>\r\n                                        <div style=\"font-size: 14px; opacity: 0.9;\">\u274c Rejeitadas<\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                            \r\n                            <div style=\"display: grid; gap: 20px;\">\r\n                                ${returns.sort((a, b) => new Date(b.requestedAt) - new Date(a.requestedAt)).map(returnRequest => {\r\n                                    const product = products.find(p => p.$id === returnRequest.productId || p.id === returnRequest.productId);\r\n                                    const productImage = product?.image || getPlaceholderDataURI('Produto', 400, 300);\r\n                                    const requestDate = new Date(returnRequest.requestedAt);\r\n                                    \r\n                                    let statusBadge = '';\r\n                                    let borderColor = '';\r\n                                    \r\n                                    if (returnRequest.status === 'Pendente') {\r\n                                        statusBadge = '<span style=\"background: #fef3c7; color: #92400e; padding: 6px 12px; border-radius: 20px; font-size: 13px; font-weight: 600; border: 1px solid #f59e0b;\">\u23f3 Aguardando Aprova\u00e7\u00e3o<\/span>';\r\n                                        borderColor = '#f59e0b';\r\n                                    } else if (returnRequest.status === 'Aprovada') {\r\n                                        statusBadge = '<span style=\"background: #d1fae5; color: #065f46; padding: 6px 12px; border-radius: 20px; font-size: 13px; font-weight: 600; border: 1px solid #10b981;\">\u2705 Aprovada<\/span>';\r\n                                        borderColor = '#10b981';\r\n                                    } else {\r\n                                        statusBadge = '<span style=\"background: #fee2e2; color: #991b1b; padding: 6px 12px; border-radius: 20px; font-size: 13px; font-weight: 600; border: 1px solid #ef4444;\">\u274c Rejeitada<\/span>';\r\n                                        borderColor = '#ef4444';\r\n                                    }\r\n                                    \r\n                                    return `\r\n                                        <div style=\"background: white; border-radius: 12px; padding: 20px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); border-left: 4px solid ${borderColor};\">\r\n                                            <div style=\"display: flex; justify-content: space-between; align-items: start; margin-bottom: 15px;\">\r\n                                                <div>\r\n                                                    <p style=\"margin: 0; color: #6b7280; font-size: 13px;\">\ud83d\udcc5 Solicitado em: ${formatDate(returnRequest.requestedAt)} \u00e0s ${requestDate.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })}<\/p>\r\n                                                    ${returnRequest.processedAt ? `<p style=\"margin: 5px 0 0 0; color: #6b7280; font-size: 13px;\">\ud83d\udccb Processado em: ${formatDate(returnRequest.processedAt)}<\/p>` : ''}\r\n                                                <\/div>\r\n                                                ${statusBadge}\r\n                                            <\/div>\r\n                                            \r\n                                            <div style=\"display: grid; grid-template-columns: 100px 1fr; gap: 20px; padding: 15px; background: #f9fafb; border-radius: 8px;\">\r\n                                                <img decoding=\"async\" src=\"${productImage}\" alt=\"${returnRequest.productName}\" \r\n                                                    style=\"width: 100px; height: 100px; object-fit: cover; border-radius: 8px; border: 2px solid #e5e7eb;\"\r\n                                                    onerror=\"this.src='${getPlaceholderDataURI('Produto', 400, 300)}'\">\r\n                                                \r\n                                                <div>\r\n                                                    <h4 style=\"margin: 0 0 12px 0; color: #111827; font-size: 16px;\">${returnRequest.productName}<\/h4>\r\n                                                    <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; font-size: 14px;\">\r\n                                                        <div>\r\n                                                            <span style=\"color: #6b7280;\">Quantidade:<\/span>\r\n                                                            <strong style=\"color: #f59e0b;\"> ${returnRequest.quantity} un.<\/strong>\r\n                                                        <\/div>\r\n                                                        <div>\r\n                                                            <span style=\"color: #6b7280;\">Estoque Antes:<\/span>\r\n                                                            <strong style=\"color: #3b82f6;\"> ${returnRequest.currentUserStock} un.<\/strong>\r\n                                                        <\/div>\r\n                                                        ${returnRequest.status === 'Aprovada' ? `\r\n                                                            <div>\r\n                                                                <span style=\"color: #6b7280;\">Estoque Devolvido:<\/span>\r\n                                                                <strong style=\"color: #059669;\"> ${returnRequest.currentUserStock + returnRequest.quantity} un.<\/strong>\r\n                                                            <\/div>\r\n                                                        ` : ''}\r\n                                                    <\/div>\r\n                                                    \r\n                                                    ${returnRequest.status === 'Rejeitada' && returnRequest.rejectionReason ? `\r\n                                                        <div style=\"margin-top: 12px; padding: 10px; background: #fee2e2; border-radius: 6px; border-left: 3px solid #ef4444;\">\r\n                                                            <strong style=\"color: #991b1b; font-size: 13px;\">Motivo da Rejei\u00e7\u00e3o:<\/strong>\r\n                                                            <p style=\"margin: 5px 0 0 0; color: #7f1d1d; font-size: 13px;\">${returnRequest.rejectionReason}<\/p>\r\n                                                        <\/div>\r\n                                                    ` : ''}\r\n                                                    \r\n                                                    ${returnRequest.status === 'Pendente' ? `\r\n                                                        <div style=\"margin-top: 12px; padding: 10px; background: #fef3c7; border-radius: 6px;\">\r\n                                                            <p style=\"margin: 0; color: #92400e; font-size: 13px;\">\r\n                                                                \u23f3 Aguardando revis\u00e3o do administrador. Voc\u00ea ser\u00e1 notificado assim que a solicita\u00e7\u00e3o for processada.\r\n                                                            <\/p>\r\n                                                        <\/div>\r\n                                                    ` : ''}\r\n                                                    \r\n                                                    ${returnRequest.status === 'Aprovada' ? `\r\n                                                        <div style=\"margin-top: 12px; padding: 10px; background: #d1fae5; border-radius: 6px;\">\r\n                                                            <p style=\"margin: 0; color: #065f46; font-size: 13px;\">\r\n                                                                Retorno aprovado! As unidades foram devolvidas ao seu estoque e voc\u00ea j\u00e1 pode envi\u00e1-las novamente.\r\n                                                            <\/p>\r\n                                                        <\/div>\r\n                                                    ` : ''}\r\n                                                <\/div>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    `;\r\n                                }).join('')}\r\n                            <\/div>\r\n                        `;\r\n                        \r\n                        console.log('\u2705 Minhas solicita\u00e7\u00f5es carregadas');\r\n                    }\r\n\r\n                    async function viewSaleLabel(saleId) {\r\n                        const sales = await getSales();\r\n                        const sale = sales.find(s => s.id === saleId);\r\n                        if (!sale) return;\r\n                        \r\n                        console.log('\ud83d\udd0d ===== DEBUG VISUALIZA\u00c7\u00c3O DE ETIQUETA (CLIENTE) =====');\r\n                        console.log('\ud83d\udd0d Sale completo:', sale);\r\n                        console.log('\ud83d\udccb labelUrl:', sale.labelUrl);\r\n                        console.log('\ud83d\udccb labelFileId:', sale.labelFileId);\r\n                        console.log('\ud83d\udccb labelType:', sale.labelType);\r\n                        console.log('\ud83d\udccb label (nome):', sale.label);\r\n                        \r\n                        \/\/ Buscar produtos para obter imagem\r\n                        const products = await getProducts();\r\n                        const product = products.find(p => p.$id === sale.productAppwriteId || p.id === sale.productId);\r\n                        const productImage = product?.image || getPlaceholderDataURI('Produto', 400, 300);\r\n                        \r\n                        \/\/ Verificar se h\u00e1 etiqueta salva (inclui fallback base64)\r\n                        let hasLabel = false;\r\n                        let labelUrl = '';\r\n\r\n                        \/\/ Prioridade: URL salva -> URL constru\u00edda via fileId -> base64\r\n                        if (sale.labelUrl && sale.labelUrl.length > 0) {\r\n                            hasLabel = true;\r\n                            labelUrl = sale.labelUrl;\r\n                            console.log('\u2705 labelUrl encontrado:', labelUrl);\r\n                        }\r\n                        \r\n                        if (!hasLabel && sale.labelFileId && sale.labelFileId.length > 0) {\r\n                            labelUrl = `${appwriteConfig.endpoint}\/storage\/buckets\/${appwriteConfig.bucketId}\/files\/${sale.labelFileId}\/view?project=${appwriteConfig.projectId}`;\r\n                            hasLabel = true;\r\n                            console.log('\u2705 URL constru\u00edda a partir do labelFileId:', labelUrl);\r\n                        }\r\n\r\n                        if (!hasLabel && sale.labelBase64 && sale.labelBase64.length > 0) {\r\n                            labelUrl = sale.labelBase64;\r\n                            hasLabel = true;\r\n                            console.log('\u2705 Usando labelBase64 como fallback');\r\n                        }\r\n                        \r\n                        const isPDF = sale.labelType === 'application\/pdf' || sale.label?.toLowerCase().endsWith('.pdf');\r\n                        const isImage = sale.labelType && sale.labelType.startsWith('image\/');\r\n                        \r\n                        console.log('\ud83d\udccb hasLabel:', hasLabel);\r\n                        console.log('\ud83d\udccb isPDF:', isPDF);\r\n                        console.log('\ud83d\udccb isImage:', isImage);\r\n                        console.log('\ud83d\udccb URL final:', labelUrl);\r\n                        console.log('\ud83d\udd0d ============================================');\r\n                        \r\n                        let labelContent = '';\r\n                        if (hasLabel && isPDF) {\r\n                            \/\/ Exibir PDF em iframe com fallback\r\n                            labelContent = `\r\n                                <div style=\"margin-top: 20px;\">\r\n                                    <h4 style=\"margin-bottom: 10px;\">\ud83d\udcc4 Visualiza\u00e7\u00e3o da Etiqueta (PDF)<\/h4>\r\n                                    <div style=\"background: #f9fafb; padding: 15px; border-radius: 8px; margin-bottom: 10px;\">\r\n                                        <p style=\"margin: 0; color: #6b7280; font-size: 14px;\">\r\n                                            \ud83d\udca1 Se o PDF n\u00e3o carregar, clique em \"Abrir em Nova Aba\" para visualizar\r\n                                        <\/p>\r\n                                    <\/div>\r\n                                    <iframe \r\n                                        src=\"${labelUrl}\" \r\n                                        style=\"width: 100%; height: 600px; border: 1px solid #e5e7eb; border-radius: 8px;\"\r\n                                        onerror=\"console.error('Erro ao carregar iframe do PDF')\">\r\n                                    <\/iframe>\r\n                                    <div style=\"margin-top: 15px; text-align: center; display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;\">\r\n                                        <a href=\"${labelUrl}\" target=\"_blank\" class=\"btn btn-primary\">\r\n                                            \ud83d\udd17 Abrir em Nova Aba\r\n                                        <\/a>\r\n                                        <button class=\"btn btn-primary\" onclick=\"printPDFLabel('${labelUrl}', '${sale.label}')\">\r\n                                            \ud83d\udda8\ufe0f Imprimir\r\n                                        <\/button>\r\n                                        <a href=\"${labelUrl}\" download=\"${sale.label}\" class=\"btn btn-secondary\">\r\n                                            \u2b07\ufe0f Baixar PDF\r\n                                        <\/a>\r\n                                        <button class=\"btn btn-danger\" onclick=\"deleteSaleLabel(${sale.id})\">\r\n                                            \ud83d\uddd1\ufe0f Excluir Etiqueta\r\n                                        <\/button>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            `;\r\n                        } else if (hasLabel && isImage) {\r\n                            \/\/ Exibir imagem\r\n                            labelContent = `\r\n                                <div style=\"margin-top: 20px;\">\r\n                                    <h4 style=\"margin-bottom: 10px;\">\ud83d\udcf7 Visualiza\u00e7\u00e3o da Etiqueta (Imagem)<\/h4>\r\n                                    <img decoding=\"async\" \r\n                                        src=\"${labelUrl}\" \r\n                                        alt=\"Etiqueta\" \r\n                                        style=\"max-width: 100%; height: auto; border: 1px solid #e5e7eb; border-radius: 8px;\"\r\n                                        onerror=\"this.style.display='none'; this.parentElement.innerHTML += '<div style=\\\\'padding: 20px; background: #fee2e2; border-radius: 8px; text-align: center;\\\\'>\u274c Erro ao carregar imagem<\/div>'\">\r\n                                    <div style=\"margin-top: 15px; text-align: center; display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;\">\r\n                                        <button class=\"btn btn-primary\" onclick=\"printImageLabel('${labelUrl}', '${sale.label}')\">\r\n                                            \ud83d\udda8\ufe0f Imprimir Imagem\r\n                                        <\/button>\r\n                                        <a href=\"${labelUrl}\" download=\"${sale.label}\" class=\"btn btn-secondary\">\r\n                                            \u2b07\ufe0f Baixar Imagem\r\n                                        <\/a>\r\n                                        <button class=\"btn btn-danger\" onclick=\"deleteSaleLabel(${sale.id})\">\r\n                                            \ud83d\uddd1\ufe0f Excluir Etiqueta\r\n                                        <\/button>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            `;\r\n                        } else if (hasLabel) {\r\n                            \/\/ Tipo desconhecido ou sem tipo, mas tem URL\r\n                            labelContent = `\r\n                                <div style=\"margin-top: 20px;\">\r\n                                    <h4 style=\"margin-bottom: 10px;\">\ud83d\udcce Arquivo Anexado<\/h4>\r\n                                    <div style=\"padding: 20px; background: #f3f4f6; border-radius: 8px; text-align: center;\">\r\n                                        <p style=\"margin: 0 0 15px 0;\">Arquivo: <strong>${sale.label}<\/strong><\/p>\r\n                                        <div style=\"display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;\">\r\n                                            <a href=\"${labelUrl}\" target=\"_blank\" class=\"btn btn-primary\">\r\n                                                \ud83d\udc41\ufe0f Visualizar\/Baixar\r\n                                            <\/a>\r\n                                            <button class=\"btn btn-secondary\" onclick=\"window.open('${labelUrl}', '_blank')\">\r\n                                                \ud83d\udd17 Abrir em Nova Aba\r\n                                            <\/button>\r\n                                            <button class=\"btn btn-danger\" onclick=\"deleteSaleLabel(${sale.id})\">\r\n                                                \ud83d\uddd1\ufe0f Excluir Etiqueta\r\n                                            <\/button>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            `;\r\n                        } else {\r\n                            \/\/ Sem etiqueta - mostrar op\u00e7\u00e3o de upload\r\n                            labelContent = `\r\n                                <div style=\"margin-top: 20px;\">\r\n                                    <div style=\"padding: 20px; background: #fef3c7; border-radius: 8px; text-align: center; margin-bottom: 20px;\">\r\n                                        <p style=\"margin: 0; color: #92400e;\">\u26a0\ufe0f Nenhuma etiqueta anexada<\/p>\r\n                                        <p style=\"margin: 5px 0 0 0; font-size: 14px; color: #78350f;\">Clique no bot\u00e3o abaixo para anexar uma nova etiqueta<\/p>\r\n                                    <\/div>\r\n                                    <div style=\"text-align: center;\">\r\n                                        <button class=\"btn btn-primary\" onclick=\"uploadNewSaleLabel(${sale.id})\">\r\n                                            \ud83d\udce4 Anexar Nova Etiqueta\r\n                                        <\/button>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            `;\r\n                        }\r\n                        \r\n                        document.getElementById('labelContent').innerHTML = `\r\n                            <div style=\"display: grid; grid-template-columns: 150px 1fr; gap: 20px; margin-bottom: 20px;\">\r\n                                <img decoding=\"async\" src=\"${productImage}\" alt=\"${sale.productName}\" style=\"width: 150px; height: 150px; object-fit: cover; border-radius: 8px; border: 2px solid #e5e7eb;\" onerror=\"this.src='${getPlaceholderDataURI('Produto', 400, 300)}'\">\r\n                                \r\n                                <div class=\"card-info\">\r\n                                    <div class=\"card-info-item\"><span class=\"label\">Produto:<\/span><span class=\"value\">${sale.productName}<\/span><\/div>\r\n                                    <div class=\"card-info-item\"><span class=\"label\">Quantidade:<\/span><span class=\"value\"><strong>${sale.quantity} unidades<\/strong><\/span><\/div>\r\n                                    <div class=\"card-info-item\"><span class=\"label\">Status:<\/span><span class=\"value\"><span class=\"badge badge-${sale.status === 'Enviado' ? 'enviado' : 'pendente'}\">${sale.status}<\/span><\/span><\/div>\r\n                                    <div class=\"card-info-item\"><span class=\"label\">Arquivo:<\/span><span class=\"value\">${sale.label || 'Sem etiqueta'}<\/span><\/div>\r\n                                    <div class=\"card-info-item\"><span class=\"label\">Data:<\/span><span class=\"value\">${formatDate(sale.createdAt)}<\/span><\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                            \r\n                            ${labelContent}\r\n                            \r\n                            ${hasLabel ? `\r\n                            <div style=\"margin-top: 20px; padding: 15px; background: #f3f4f6; border-radius: 8px; text-align: center;\">\r\n                                <p style=\"margin: 0 0 10px 0; color: #374151; font-size: 14px;\">Deseja substituir a etiqueta atual?<\/p>\r\n                                <button class=\"btn btn-warning\" onclick=\"uploadNewSaleLabel(${sale.id})\">\r\n                                    \ud83d\udd04 Substituir Etiqueta\r\n                                <\/button>\r\n                            <\/div>\r\n                            ` : ''}\r\n                        `;\r\n                        \r\n                        document.getElementById('labelModal').classList.add('active');\r\n                    }\r\n                    \r\n                    async function deleteSaleLabel(saleId) {\r\n                        if (!confirm('\u26a0\ufe0f Tem certeza que deseja excluir esta etiqueta?\\n\\nEsta a\u00e7\u00e3o n\u00e3o pode ser desfeita.')) {\r\n                            return;\r\n                        }\r\n                        \r\n                        try {\r\n                            const sales = await getSales();\r\n                            const sale = sales.find(s => s.id === saleId);\r\n                            \r\n                            if (!sale) {\r\n                                alert('\u274c Venda n\u00e3o encontrada!');\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Excluir arquivo do Storage se existir labelFileId\r\n                            if (sale.labelFileId) {\r\n                                try {\r\n                                    console.log('\ud83d\uddd1\ufe0f Excluindo arquivo do Storage:', sale.labelFileId);\r\n                                    await storage.deleteFile(\r\n                                        appwriteConfig.bucketId,\r\n                                        sale.labelFileId\r\n                                    );\r\n                                    console.log('\u2705 Arquivo exclu\u00eddo do Storage');\r\n                                } catch (storageError) {\r\n                                    console.error('\u26a0\ufe0f Erro ao excluir arquivo do Storage:', storageError);\r\n                                    \/\/ Continua mesmo se falhar no storage\r\n                                }\r\n                            }\r\n                            \r\n                            \/\/ Atualizar dados da venda removendo a etiqueta\r\n                            const updateData = {\r\n                                label: '',\r\n                                labelFileId: '',\r\n                                labelUrl: '',\r\n                                labelType: ''\r\n                            };\r\n                            \r\n                            \/\/ Atualizar no Appwrite\r\n                            try {\r\n                                const appwriteSales = await databases.listDocuments(\r\n                                    appwriteConfig.databaseId,\r\n                                    appwriteConfig.collections.sales\r\n                                );\r\n                                const saleDoc = appwriteSales.documents.find(s => s.id === saleId);\r\n                                \r\n                                if (saleDoc && saleDoc.$id) {\r\n                                    await databases.updateDocument(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.sales,\r\n                                        saleDoc.$id,\r\n                                        updateData\r\n                                    );\r\n                                    console.log('\u2705 Etiqueta removida no Appwrite');\r\n                                }\r\n                            } catch (dbError) {\r\n                                console.error('\u26a0\ufe0f Erro ao atualizar Appwrite:', dbError);\r\n                            }\r\n                            \r\n                            \/\/ Atualizar LocalStorage\r\n                            sale.label = '';\r\n                            sale.labelFileId = '';\r\n                            sale.labelUrl = '';\r\n                            sale.labelType = '';\r\n                            await setSales(sales);\r\n                            \r\n                            alert('\u2705 Etiqueta exclu\u00edda com sucesso!');\r\n                            closeModal('labelModal');\r\n                            await loadSales();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao excluir etiqueta:', error);\r\n                            alert('\u274c Erro ao excluir etiqueta: ' + error.message);\r\n                        }\r\n                    }\r\n                    \r\n                    async function uploadNewSaleLabel(saleId) {\r\n                        \/\/ Criar input file tempor\u00e1rio\r\n                        const input = document.createElement('input');\r\n                        input.type = 'file';\r\n                        input.accept = '.pdf,.jpg,.jpeg,.png,.webp';\r\n                        \r\n                        input.onchange = async (e) => {\r\n                            const file = e.target.files[0];\r\n                            if (!file) return;\r\n                            \r\n                            \/\/ Validar tipo de arquivo\r\n                            const allowedTypes = ['image\/jpeg', 'image\/jpg', 'image\/png', 'image\/webp', 'application\/pdf'];\r\n                            if (!allowedTypes.includes(file.type)) {\r\n                                alert('\u274c Formato inv\u00e1lido! Use PDF, JPG ou PNG.');\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Validar tamanho (m\u00e1x 10MB)\r\n                            if (file.size > 10 * 1024 * 1024) {\r\n                                alert('\u274c Arquivo muito grande! Tamanho m\u00e1ximo: 10MB');\r\n                                return;\r\n                            }\r\n                            \r\n                            try {\r\n                                const sales = await getSales();\r\n                                const sale = sales.find(s => s.id === saleId);\r\n                                \r\n                                if (!sale) {\r\n                                    alert('\u274c Venda n\u00e3o encontrada!');\r\n                                    return;\r\n                                }\r\n                                \r\n                                \/\/ Excluir etiqueta antiga do Storage se existir\r\n                                if (sale.labelFileId) {\r\n                                    try {\r\n                                        console.log('\ud83d\uddd1\ufe0f Excluindo etiqueta antiga do Storage:', sale.labelFileId);\r\n                                        await storage.deleteFile(\r\n                                            appwriteConfig.bucketId,\r\n                                            sale.labelFileId\r\n                                        );\r\n                                        console.log('\u2705 Etiqueta antiga exclu\u00edda');\r\n                                    } catch (deleteError) {\r\n                                        console.error('\u26a0\ufe0f Erro ao excluir etiqueta antiga:', deleteError);\r\n                                        \/\/ Continua mesmo se falhar\r\n                                    }\r\n                                }\r\n                                \r\n                                \/\/ Fazer upload do novo arquivo\r\n                                console.log('\ud83d\udce4 Fazendo upload da nova etiqueta...');\r\n                                const uploadResult = await storage.createFile(\r\n                                    appwriteConfig.bucketId,\r\n                                    'unique()',\r\n                                    file\r\n                                );\r\n                                \r\n                                const newLabelFileId = uploadResult.$id;\r\n                                const newLabelUrl = `${appwriteConfig.endpoint}\/storage\/buckets\/${appwriteConfig.bucketId}\/files\/${newLabelFileId}\/view?project=${appwriteConfig.projectId}`;\r\n                                \r\n                                console.log('\u2705 Nova etiqueta enviada! File ID:', newLabelFileId);\r\n                                console.log('\ud83d\udcce URL:', newLabelUrl);\r\n                                \r\n                                \/\/ Atualizar dados da venda\r\n                                const updateData = {\r\n                                    label: file.name,\r\n                                    labelFileId: newLabelFileId,\r\n                                    labelUrl: newLabelUrl,\r\n                                    labelType: file.type\r\n                                };\r\n                                \r\n                                \/\/ Atualizar no Appwrite\r\n                                try {\r\n                                    const appwriteSales = await databases.listDocuments(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.sales\r\n                                    );\r\n                                    const saleDoc = appwriteSales.documents.find(s => s.id === saleId);\r\n                                    \r\n                                    if (saleDoc && saleDoc.$id) {\r\n                                        await databases.updateDocument(\r\n                                            appwriteConfig.databaseId,\r\n                                            appwriteConfig.collections.sales,\r\n                                            saleDoc.$id,\r\n                                            updateData\r\n                                        );\r\n                                        console.log('\u2705 Etiqueta atualizada no Appwrite');\r\n                                    }\r\n                                } catch (dbError) {\r\n                                    console.error('\u26a0\ufe0f Erro ao atualizar Appwrite:', dbError);\r\n                                }\r\n                                \r\n                                \/\/ Atualizar LocalStorage\r\n                                sale.label = file.name;\r\n                                sale.labelFileId = newLabelFileId;\r\n                                sale.labelUrl = newLabelUrl;\r\n                                sale.labelType = file.type;\r\n                                await setSales(sales);\r\n                                \r\n                                alert('\u2705 Nova etiqueta anexada com sucesso!');\r\n                                closeModal('labelModal');\r\n                                await loadSales();\r\n                                \r\n                            } catch (error) {\r\n                                console.error('\u274c Erro ao anexar nova etiqueta:', error);\r\n                                alert('\u274c Erro ao anexar nova etiqueta: ' + error.message);\r\n                            }\r\n                        };\r\n                        \r\n                        input.click();\r\n                    }\r\n\r\n                    \/\/ Admin Functions\r\n                    async function loadPendingShipments() {\r\n                        console.log('\\n\ud83d\udd0d [loadPendingShipments] INICIANDO...');\r\n                        const allSales = await getSales();\r\n                        console.log('\ud83d\udcca [loadPendingShipments] Total de vendas retornadas:', allSales.length);\r\n                        \r\n                        \/\/ \ud83c\udfaf BUSCAR VENDA ESPEC\u00cdFICA REPORTADA PELO USU\u00c1RIO\r\n                        const vendaEspecifica = allSales.find(s => s.$id === '694159d21adf9ad30391' || s.id === '694159d21adf9ad30391');\r\n                        if (vendaEspecifica) {\r\n                            console.log('\\n\ud83c\udfaf\ud83c\udfaf\ud83c\udfaf [VENDA ESPEC\u00cdFICA ENCONTRADA] 694159d21adf9ad30391:');\r\n                            console.log('   ID:', vendaEspecifica.id);\r\n                            console.log('   $id:', vendaEspecifica.$id);\r\n                            console.log('   Status:', vendaEspecifica.status);\r\n                            console.log('   Tipo do Status:', typeof vendaEspecifica.status);\r\n                            console.log('   Produto:', vendaEspecifica.productName);\r\n                            console.log('   Usu\u00e1rio:', vendaEspecifica.userName);\r\n                            console.log('   Data:', vendaEspecifica.saleDate);\r\n                            console.log('   OBJETO COMPLETO:', JSON.stringify(vendaEspecifica, null, 2));\r\n                            \r\n                            const temAppwriteId = !!vendaEspecifica.$id;\r\n                            const ePendente = !vendaEspecifica.status || vendaEspecifica.status === '' || vendaEspecifica.status === 'Aguardando Envio' || vendaEspecifica.status === 'Pendente';\r\n                            console.log('   \u2705 Tem $id?', temAppwriteId);\r\n                            console.log('   \u2705 \u00c9 pendente?', ePendente);\r\n                            console.log('   \u2705 DEVERIA APARECER NO ADMIN?', temAppwriteId && ePendente ? '\u2705 SIM' : '\u274c N\u00c3O');\r\n                            \r\n                            if (!ePendente) {\r\n                                console.log('   \u274c MOTIVO: Status n\u00e3o \u00e9 pendente. Status atual:', `\"${vendaEspecifica.status}\"`);\r\n                            }\r\n                            if (!temAppwriteId) {\r\n                                console.log('   \u274c MOTIVO: N\u00e3o tem $id (est\u00e1 apenas no localStorage)');\r\n                            }\r\n                        } else {\r\n                            console.log('\\n\u274c [VENDA N\u00c3O ENCONTRADA] 694159d21adf9ad30391 n\u00e3o foi encontrada em allSales');\r\n                        }\r\n                        \r\n                        \/\/ Mostrar TODAS as vendas com seus status e $id\r\n                        console.log('\\n\ud83d\udccb [loadPendingShipments] AN\u00c1LISE DE TODAS AS VENDAS:');\r\n                        allSales.forEach((s, idx) => {\r\n                            const temAppwriteId = !!s.$id;\r\n                            const ePendente = !s.status || s.status === '' || s.status === 'Aguardando Envio' || s.status === 'Pendente';\r\n                            const apareceraNoAdmin = temAppwriteId && ePendente;\r\n                            \r\n                            console.log(`  ${idx + 1}. ID: ${s.id} | $id: ${s.$id || '\u274c N\u00c3O TEM'} | Status: \"${s.status}\" | Pendente: ${ePendente ? '\u2705' : '\u274c'} | Aparecer\u00e1: ${apareceraNoAdmin ? '\u2705 SIM' : '\u274c N\u00c3O'} | Produto: ${s.productName}`);\r\n                        });\r\n                        \r\n                        \/\/ Filtrar vendas pendentes\r\n                        const sales = allSales.filter(s => \r\n                            !s.status || s.status === '' || s.status === 'Aguardando Envio' || s.status === 'Pendente'\r\n                        );\r\n                        \r\n                        console.log('\\n\ud83d\udce6 [loadPendingShipments] Vendas com status PENDENTE:', sales.length);\r\n                        console.log('\ud83d\udce6 [loadPendingShipments] Detalhes das vendas pendentes:');\r\n                        sales.forEach((s, idx) => {\r\n                            console.log(`  ${idx + 1}. ID: ${s.id} | $id: ${s.$id || '\u274c SEM $ID'} | Status: \"${s.status}\" | Produto: ${s.productName} | Usu\u00e1rio: ${s.userName}`);\r\n                        });\r\n                        \r\n                        \/\/ \ud83c\udfaf VERIFICAR SE A VENDA ESPEC\u00cdFICA EST\u00c1 NA LISTA FILTRADA\r\n                        const vendaEspecificaFiltrada = sales.find(s => s.$id === '694159d21adf9ad30391' || s.id === '694159d21adf9ad30391');\r\n                        if (vendaEspecificaFiltrada) {\r\n                            console.log('\\n\u2705\u2705\u2705 [VENDA 694159d21adf9ad30391] PASSOU NO FILTRO - Est\u00e1 na lista de pendentes!');\r\n                        } else {\r\n                            console.log('\\n\u274c\u274c\u274c [VENDA 694159d21adf9ad30391] N\u00c3O PASSOU NO FILTRO - N\u00e3o est\u00e1 na lista de pendentes!');\r\n                            const vendaNaoFiltrada = allSales.find(s => s.$id === '694159d21adf9ad30391' || s.id === '694159d21adf9ad30391');\r\n                            if (vendaNaoFiltrada) {\r\n                                console.log('   Motivo: Status \u00e9 \"${vendaNaoFiltrada.status}\" (tipo: ${typeof vendaNaoFiltrada.status})');\r\n                                console.log('   Compara\u00e7\u00f5es:');\r\n                                console.log('      !s.status:', !vendaNaoFiltrada.status);\r\n                                console.log('      s.status === \"\":', vendaNaoFiltrada.status === '');\r\n                                console.log('      s.status === \"Aguardando Envio\":', vendaNaoFiltrada.status === 'Aguardando Envio');\r\n                                console.log('      s.status === \"Pendente\":', vendaNaoFiltrada.status === 'Pendente');\r\n                                console.log('   Status com caracteres invis\u00edveis?', JSON.stringify(vendaNaoFiltrada.status));\r\n                            }\r\n                        }\r\n                        \r\n                        const list = document.getElementById('pendingShipmentsList');\r\n                        if (!list) {\r\n                            console.error('\u274c [loadPendingShipments] Elemento pendingShipmentsList N\u00c3O encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Verificar vendas n\u00e3o sincronizadas\r\n                        const notSynced = allSales.filter(s => !s.$id);\r\n                        console.log(`\\n\u26a0\ufe0f [loadPendingShipments] Vendas SEM $id (apenas localStorage): ${notSynced.length}`);\r\n                        if (notSynced.length > 0) {\r\n                            console.log('\u26a0\ufe0f Estas vendas N\u00c3O est\u00e3o no Appwrite e precisam ser sincronizadas:');\r\n                            notSynced.forEach((s, idx) => {\r\n                                console.log(`  ${idx + 1}. ID: ${s.id} | Status: \"${s.status}\" | Produto: ${s.productName}`);\r\n                            });\r\n                        }\r\n                        \r\n                        let alertHtml = '';\r\n                        if (notSynced.length > 0) {\r\n                            alertHtml = `\r\n                                <div style=\"background: #fef3c7; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 4px solid #f59e0b;\">\r\n                                    <h3 style=\"margin: 0 0 10px 0; color: #92400e;\">\u26a0\ufe0f ${notSynced.length} Vendas Apenas no Navegador<\/h3>\r\n                                    <p style=\"margin: 0; color: #78350f; font-size: 14px;\">\r\n                                        Estas vendas est\u00e3o apenas no localStorage do navegador e n\u00e3o foram sincronizadas com o Appwrite.\r\n                                        Clique em <strong>\"\ud83d\udd04 Sincronizar Vendas Locais\"<\/strong> acima para envi\u00e1-las ao banco de dados.\r\n                                    <\/p>\r\n                                <\/div>\r\n                            `;\r\n                        }\r\n                        \r\n                        if (sales.length === 0) {\r\n                            list.innerHTML = alertHtml + '<p style=\"text-align:center;color:#6b7280;\">Nenhum envio pendente<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Buscar produtos para obter as imagens\r\n                        const products = await getProducts();\r\n                        \r\n                        \/\/ Calcular quantidade total de produtos pendentes\r\n                        const totalProducts = sales.reduce((sum, s) => sum + s.quantity, 0);\r\n                        \r\n                        console.log(`\\n\ud83c\udfa8 [loadPendingShipments] RENDERIZANDO ${sales.length} vendas no HTML...`);\r\n                        \r\n                        \/\/ \ud83c\udfaf LOG ANTES DE RENDERIZAR\r\n                        const temVendaEspecifica = sales.find(s => s.$id === '694159d21adf9ad30391' || s.id === '694159d21adf9ad30391');\r\n                        if (temVendaEspecifica) {\r\n                            console.log('\u2705 Venda 694159d21adf9ad30391 SER\u00c1 RENDERIZADA no HTML');\r\n                        } else {\r\n                            console.log('\u274c Venda 694159d21adf9ad30391 N\u00c3O SER\u00c1 RENDERIZADA (n\u00e3o est\u00e1 na lista sales)');\r\n                        }\r\n                        \r\n                        list.innerHTML = `\r\n                            ${alertHtml}\r\n                            <div style=\"background: #fef3c7; padding: 15px; border-radius: 8px; margin-bottom: 20px; text-align: center;\">\r\n                                <h3 style=\"margin: 0; color: #92400e;\">\ud83d\udce6 Total de Produtos Pendentes: <strong>${totalProducts}<\/strong> unidades<\/h3>\r\n                                <p style=\"margin: 5px 0 0 0; color: #78350f; font-size: 14px;\">${sales.length} pedido(s) aguardando confirma\u00e7\u00e3o<\/p>\r\n                            <\/div>\r\n                            \r\n                            <div style=\"display: grid; gap: 20px;\">\r\n                                ${sales.map(s => {\r\n                                    const product = products.find(p => p.$id === s.productAppwriteId || p.id === s.productId);\r\n                                    const productImage = product?.image || getPlaceholderDataURI('Produto', 400, 300);\r\n                                    \r\n                                    return `\r\n                                    <div class=\"shipment-card\" style=\"background: white; border-radius: 12px; padding: 20px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); border-left: 4px solid #f59e0b;\">\r\n                                        <div style=\"display: grid; grid-template-columns: 120px 1fr; gap: 20px; align-items: start;\">\r\n                                            <img decoding=\"async\" src=\"${productImage}\" alt=\"${s.productName}\" style=\"width: 120px; height: 120px; object-fit: cover; border-radius: 8px; border: 2px solid #e5e7eb;\" onerror=\"this.src='${getPlaceholderDataURI('Produto', 400, 300)}'\">\r\n                                            \r\n                                            <div>\r\n                                                <div style=\"display: flex; justify-content: space-between; align-items: start; margin-bottom: 15px;\">\r\n                                                    <div>\r\n                                                        <h3 style=\"margin: 0 0 5px 0; color: #111827; font-size: 18px;\">${s.productName}<\/h3>\r\n                                                        <p style=\"margin: 0; color: #6b7280; font-size: 14px;\">\ud83d\udc64 ${s.userName}<\/p>\r\n                                                        ${s.userEmail ? `<p style=\"margin: 0; color: #9ca3af; font-size: 13px;\">\ud83d\udce7 ${s.userEmail}<\/p>` : ''}\r\n                                                    <\/div>\r\n                                                    <span style=\"background: #fef3c7; color: #92400e; padding: 6px 12px; border-radius: 20px; font-size: 13px; font-weight: 600;\">\u23f3 Aguardando Envio<\/span>\r\n                                                <\/div>\r\n                                                \r\n                                                <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 15px; margin-bottom: 15px;\">\r\n                                                    <div style=\"background: #f9fafb; padding: 12px; border-radius: 8px;\">\r\n                                                        <div style=\"font-size: 12px; color: #6b7280; margin-bottom: 4px;\">Quantidade<\/div>\r\n                                                        <div style=\"font-size: 24px; font-weight: 700; color: #6d28d9;\">${s.quantity}<\/div>\r\n                                                    <\/div>\r\n                                                    <div style=\"background: #f9fafb; padding: 12px; border-radius: 8px;\">\r\n                                                        <div style=\"font-size: 12px; color: #6b7280; margin-bottom: 4px;\">Etiqueta<\/div>\r\n                                                        <div style=\"font-size: 14px; font-weight: 500; color: #374151;\">${s.label}<\/div>\r\n                                                    <\/div>\r\n                                                    <div style=\"background: #f9fafb; padding: 12px; border-radius: 8px;\">\r\n                                                        <div style=\"font-size: 12px; color: #6b7280; margin-bottom: 4px;\">Data do Pedido<\/div>\r\n                                                        <div style=\"font-size: 14px; font-weight: 500; color: #374151;\">${formatDate(s.createdAt)}<\/div>\r\n                                                    <\/div>\r\n                                                <\/div>\r\n                                                \r\n                                                <div style=\"display: flex; gap: 10px; flex-wrap: wrap;\">\r\n                                                    <button class=\"btn btn-primary btn-small\" onclick=\"viewLabel(${s.id})\" style=\"flex: 1; min-width: 150px;\">\r\n                                                        \ud83d\udc41\ufe0f Ver Etiqueta\r\n                                                    <\/button>\r\n                                                    <button class=\"btn btn-success btn-small\" onclick=\"confirmShipment(${s.id})\" style=\"flex: 1; min-width: 150px;\">\r\n                                                        \u2705 Confirmar Envio\r\n                                                    <\/button>\r\n                                                <\/div>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                `}).join('')}\r\n                            <\/div>\r\n                        `;\r\n                        \r\n                        \/\/ Atualizar contadores\r\n                        updateAdminCounters();\r\n                    }\r\n\r\n                    async function viewLabel(saleId) {\r\n                        const sales = await getSales();\r\n                        const sale = sales.find(s => s.id === saleId);\r\n                        if (!sale) {\r\n                            alert('Venda n\u00e3o encontrada!');\r\n                            return;\r\n                        }\r\n                        \r\n                        console.log('\ud83d\udd0d ===== DEBUG VISUALIZA\u00c7\u00c3O DE ETIQUETA =====');\r\n                        console.log('\ud83d\udd0d Sale completo:', sale);\r\n                        console.log('\ud83d\udccb labelUrl:', sale.labelUrl);\r\n                        console.log('\ud83d\udccb labelFileId:', sale.labelFileId);\r\n                        console.log('\ud83d\udccb labelType:', sale.labelType);\r\n                        console.log('\ud83d\udccb label (nome):', sale.label);\r\n                        \r\n                        \/\/ Buscar produto para obter imagem\r\n                        const products = await getProducts();\r\n                        const product = products.find(p => p.$id === sale.productAppwriteId || p.id === sale.productId);\r\n                        const productImage = product?.image || getPlaceholderDataURI('Produto', 400, 300);\r\n                        \r\n                        \/\/ Verificar se h\u00e1 etiqueta salva (inclui fallback base64)\r\n                        let hasLabel = false;\r\n                        let labelUrl = '';\r\n\r\n                        \/\/ Prioridade: URL salva -> URL constru\u00edda via fileId -> base64\r\n                        if (sale.labelUrl && sale.labelUrl.length > 0) {\r\n                            hasLabel = true;\r\n                            labelUrl = sale.labelUrl;\r\n                            console.log('\u2705 labelUrl encontrado:', labelUrl);\r\n                        }\r\n                        \r\n                        if (!hasLabel && sale.labelFileId && sale.labelFileId.length > 0) {\r\n                            labelUrl = `${appwriteConfig.endpoint}\/storage\/buckets\/${appwriteConfig.bucketId}\/files\/${sale.labelFileId}\/view?project=${appwriteConfig.projectId}`;\r\n                            hasLabel = true;\r\n                            console.log('\u2705 URL constru\u00edda a partir do labelFileId:', labelUrl);\r\n                        }\r\n\r\n                        if (!hasLabel && sale.labelBase64 && sale.labelBase64.length > 0) {\r\n                            labelUrl = sale.labelBase64;\r\n                            hasLabel = true;\r\n                            console.log('\u2705 Usando labelBase64 como fallback');\r\n                        }\r\n                        \r\n                        const isPDF = sale.labelType === 'application\/pdf' || sale.label?.toLowerCase().endsWith('.pdf');\r\n                        const isImage = sale.labelType && sale.labelType.startsWith('image\/');\r\n                        \r\n                        console.log('\ud83d\udccb hasLabel:', hasLabel);\r\n                        console.log('\ud83d\udccb isPDF:', isPDF);\r\n                        console.log('\ud83d\udccb isImage:', isImage);\r\n                        console.log('\ud83d\udccb URL final:', labelUrl);\r\n                        console.log('\ud83d\udd0d ============================================');\r\n                        \r\n                        let labelContent = '';\r\n                        if (hasLabel && isPDF) {\r\n                            \/\/ Exibir PDF em iframe com fallback\r\n                            labelContent = `\r\n                                <div style=\"margin-top: 20px;\">\r\n                                    <h4 style=\"margin-bottom: 10px;\">\ud83d\udcc4 Visualiza\u00e7\u00e3o da Etiqueta (PDF)<\/h4>\r\n                                    <div style=\"background: #f9fafb; padding: 15px; border-radius: 8px; margin-bottom: 10px;\">\r\n                                        <p style=\"margin: 0; color: #6b7280; font-size: 14px;\">\r\n                                            \ud83d\udca1 Se o PDF n\u00e3o carregar, clique em \"Abrir em Nova Aba\" para visualizar\r\n                                        <\/p>\r\n                                    <\/div>\r\n                                    <iframe \r\n                                        src=\"${labelUrl}\" \r\n                                        style=\"width: 100%; height: 600px; border: 1px solid #e5e7eb; border-radius: 8px;\"\r\n                                        onerror=\"console.error('Erro ao carregar iframe do PDF')\">\r\n                                    <\/iframe>\r\n                                    <div style=\"margin-top: 10px; text-align: center; display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;\">\r\n                                        <a href=\"${labelUrl}\" target=\"_blank\" class=\"btn btn-primary\">\r\n                                            \ud83d\udd17 Abrir em Nova Aba\r\n                                        <\/a>\r\n                                        <button class=\"btn btn-primary\" onclick=\"printPDFLabel('${labelUrl}', '${sale.label}')\">\r\n                                            \ud83d\udda8\ufe0f Imprimir\r\n                                        <\/button>\r\n                                        <a href=\"${labelUrl}\" download=\"${sale.label}\" class=\"btn btn-secondary\">\r\n                                            \u2b07\ufe0f Baixar PDF\r\n                                        <\/a>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            `;\r\n                        } else if (hasLabel && isImage) {\r\n                            \/\/ Exibir imagem\r\n                            labelContent = `\r\n                                <div style=\"margin-top: 20px;\">\r\n                                    <h4 style=\"margin-bottom: 10px;\">\ud83d\udcf7 Visualiza\u00e7\u00e3o da Etiqueta (Imagem)<\/h4>\r\n                                    <img decoding=\"async\" \r\n                                        src=\"${labelUrl}\" \r\n                                        alt=\"Etiqueta\" \r\n                                        style=\"max-width: 100%; height: auto; border: 1px solid #e5e7eb; border-radius: 8px;\"\r\n                                        onerror=\"this.style.display='none'; this.parentElement.innerHTML += '<div style=\\\\'padding: 20px; background: #fee2e2; border-radius: 8px; text-align: center;\\\\'>\u274c Erro ao carregar imagem<\/div>'\"\/>\r\n                                    <div style=\"margin-top: 10px; text-align: center; display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;\">\r\n                                        <button class=\"btn btn-primary\" onclick=\"printImageLabel('${labelUrl}', '${sale.label}')\">\r\n                                            \ud83d\udda8\ufe0f Imprimir Imagem\r\n                                        <\/button>\r\n                                        <a href=\"${labelUrl}\" download=\"${sale.label}\" class=\"btn btn-secondary\">\r\n                                            \u2b07\ufe0f Baixar Imagem\r\n                                        <\/a>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            `;\r\n                        } else if (hasLabel) {\r\n                            \/\/ Tipo desconhecido ou sem tipo, mas tem URL\r\n                            labelContent = `\r\n                                <div style=\"margin-top: 20px;\">\r\n                                    <h4 style=\"margin-bottom: 10px;\">\ud83d\udcce Arquivo Anexado<\/h4>\r\n                                    <div style=\"padding: 20px; background: #f3f4f6; border-radius: 8px; text-align: center;\">\r\n                                        <p style=\"margin: 0 0 15px 0;\">Arquivo: <strong>${sale.label}<\/strong><\/p>\r\n                                        <div style=\"display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;\">\r\n                                            <a href=\"${labelUrl}\" target=\"_blank\" class=\"btn btn-primary\">\r\n                                                \ud83d\udc41\ufe0f Visualizar\/Baixar\r\n                                            <\/a>\r\n                                            <button class=\"btn btn-secondary\" onclick=\"window.open('${labelUrl}', '_blank')\">\r\n                                                \ud83d\udd17 Abrir em Nova Aba\r\n                                            <\/button>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            `;\r\n                        } else {\r\n                            labelContent = `\r\n                                <div style=\"margin-top: 20px; padding: 20px; background: #fef3c7; border-radius: 8px; text-align: center;\">\r\n                                    <p style=\"margin: 0; color: #92400e;\">\u26a0\ufe0f Etiqueta n\u00e3o dispon\u00edvel para visualiza\u00e7\u00e3o<\/p>\r\n                                    <p style=\"margin: 5px 0 0 0; font-size: 14px; color: #78350f;\">Nome do arquivo: <strong>${sale.label || 'N\u00e3o informado'}<\/strong><\/p>\r\n                                    <p style=\"margin: 10px 0 0 0; font-size: 13px; color: #78350f;\">A etiqueta pode n\u00e3o ter sido salva no Storage ou os dados est\u00e3o incompletos.<\/p>\r\n                                    <details style=\"margin-top: 15px; text-align: left; background: white; padding: 10px; border-radius: 4px;\">\r\n                                        <summary style=\"cursor: pointer; font-weight: 600;\">\ud83d\udd0d Informa\u00e7\u00f5es de Debug<\/summary>\r\n                                        <pre style=\"margin: 10px 0 0 0; font-size: 11px; overflow-x: auto;\">${JSON.stringify({\r\n                                            labelUrl: sale.labelUrl,\r\n                                            labelFileId: sale.labelFileId,\r\n                                            labelType: sale.labelType,\r\n                                            label: sale.label\r\n                                        }, null, 2)}<\/pre>\r\n                                    <\/details>\r\n                                <\/div>\r\n                            `;\r\n                        }\r\n                        \r\n                        document.getElementById('labelContent').innerHTML = `\r\n                            <div style=\"display: grid; grid-template-columns: 150px 1fr; gap: 20px; margin-bottom: 20px;\">\r\n                                <img decoding=\"async\" src=\"${productImage}\" alt=\"${sale.productName}\" style=\"width: 150px; height: 150px; object-fit: cover; border-radius: 8px; border: 2px solid #e5e7eb;\" onerror=\"this.src='${getPlaceholderDataURI('Produto', 400, 300)}'\">\r\n                                \r\n                                <div class=\"card-info\">\r\n                                    <div class=\"card-info-item\"><span class=\"label\">Produto:<\/span><span class=\"value\">${sale.productName}<\/span><\/div>\r\n                                    <div class=\"card-info-item\"><span class=\"label\">Usu\u00e1rio:<\/span><span class=\"value\">${sale.userName}<\/span><\/div>\r\n                                    ${sale.userEmail ? `<div class=\"card-info-item\"><span class=\"label\">Email:<\/span><span class=\"value\">${sale.userEmail}<\/span><\/div>` : ''}\r\n                                    <div class=\"card-info-item\"><span class=\"label\">Quantidade:<\/span><span class=\"value\"><strong>${sale.quantity} unidades<\/strong><\/span><\/div>\r\n                                    <div class=\"card-info-item\"><span class=\"label\">Arquivo:<\/span><span class=\"value\">${sale.label}<\/span><\/div>\r\n                                    <div class=\"card-info-item\"><span class=\"label\">Data:<\/span><span class=\"value\">${formatDate(sale.createdAt)}<\/span><\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                            \r\n                            ${labelContent}\r\n                        `;\r\n                        \r\n                        document.getElementById('labelModal').classList.add('active');\r\n                    }\r\n                    \r\n                    function printPDFLabel(labelUrl, fileName) {\r\n                        const printWindow = window.open(labelUrl, '_blank');\r\n                        if (printWindow) {\r\n                            printWindow.onload = function() {\r\n                                setTimeout(() => {\r\n                                    printWindow.print();\r\n                                }, 1000);\r\n                            };\r\n                        } else {\r\n                            alert('Por favor, permita pop-ups para imprimir a etiqueta');\r\n                        }\r\n                    }\r\n                    \r\n                    function printImageLabel(labelUrl, fileName) {\r\n                        const printWindow = window.open('', '_blank');\r\n                        printWindow.document.write(`\r\n                            <html>\r\n                                <head>\r\n                                    <title>Imprimir Etiqueta - ${fileName}<\/title>\r\n                                    <style>\r\n                                        body { margin: 0; padding: 20px; display: flex; justify-content: center; align-items: center; }\r\n                                        img { max-width: 100%; height: auto; }\r\n                                        @media print {\r\n                                            body { margin: 0; padding: 0; }\r\n                                        }\r\n                                    <\/style>\r\n                                <\/head>\r\n                                <body>\r\n                                    <img decoding=\"async\" src=\"${labelUrl}\" alt=\"Etiqueta\" onload=\"window.print()\">\r\n                                <\/body>\r\n                            <\/html>\r\n                        `);\r\n                        printWindow.document.close();\r\n                    }\r\n\r\n                    async function confirmShipment(saleId) {\r\n                        if (!confirm('Confirmar envio?')) return;\r\n                        \r\n                        \/\/ Buscar a venda para pegar a etiqueta\r\n                        const sales = await getSales();\r\n                        const sale = sales.find(s => s.id === saleId);\r\n                        \r\n                        if (!sale) {\r\n                            alert('\u274c Venda n\u00e3o encontrada!');\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Preservar os campos de etiqueta que j\u00e1 existem\r\n                        const updateData = {\r\n                            status: 'Enviado',\r\n                            shippedAt: new Date().toISOString()\r\n                        };\r\n                        \r\n                        \/\/ Manter labelUrl e labelFileId se existirem (n\u00e3o criar campo novo shippingLabel)\r\n                        if (sale.labelUrl) {\r\n                            updateData.labelUrl = sale.labelUrl;\r\n                        }\r\n                        if (sale.labelFileId) {\r\n                            updateData.labelFileId = sale.labelFileId;\r\n                        }\r\n                        if (sale.label) {\r\n                            updateData.label = sale.label;\r\n                        }\r\n                        if (sale.labelType) {\r\n                            updateData.labelType = sale.labelType;\r\n                        }\r\n                        \r\n                        await updateSaleStatus(saleId, 'Enviado', updateData);\r\n                        \r\n                        alert('\u2705 Envio confirmado! A etiqueta foi associada ao pedido.');\r\n                        await loadPendingShipments();\r\n                        await loadShippedOrders();\r\n                    }\r\n\r\n                    async function loadPendingApprovals() {\r\n                        const purchases = (await getPurchases()).filter(p => p.status === 'Pendente');\r\n                        const list = document.getElementById('pendingApprovalsList');\r\n                        \r\n                        if (!list) return;\r\n                        \r\n                        if (purchases.length === 0) {\r\n                            list.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Nenhuma aprova\u00e7\u00e3o pendente<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        list.innerHTML = `\r\n                            <table>\r\n                                <thead>\r\n                                    <tr>\r\n                                        <th>Usu\u00e1rio<\/th>\r\n                                        <th>Email<\/th>\r\n                                        <th>Produto<\/th>\r\n                                        <th>Qtd<\/th>\r\n                                        <th>Total<\/th>\r\n                                        <th>Comprovante<\/th>\r\n                                        <th>Data<\/th>\r\n                                        <th>A\u00e7\u00f5es<\/th>\r\n                                    <\/tr>\r\n                                <\/thead>\r\n                                <tbody>\r\n                                    ${purchases.map(p => `\r\n                                        <tr>\r\n                                            <td><strong>${p.userName || 'Sem nome'}<\/strong><\/td>\r\n                                            <td>${p.userEmail || 'Sem email'}<\/td>\r\n                                            <td>${p.productName}<\/td>\r\n                                            <td>${p.quantity}<\/td>\r\n                                            <td>R$ ${formatCurrency(p.total)}<\/td>\r\n                                            <td>\r\n                                                <button class=\"btn btn-secondary btn-small\" onclick=\"viewReceipt(${p.id})\">\r\n                                                    \ud83d\udcc4 Ver Comprovante\r\n                                                <\/button>\r\n                                            <\/td>\r\n                                            <td>${formatDate(p.createdAt)}<\/td>\r\n                                            <td style=\"white-space: nowrap;\">\r\n                                                <button class=\"btn btn-success btn-small\" onclick=\"approvePurchase(${p.id})\" style=\"margin-bottom: 5px;\">\r\n                                                    \u2705 Aprovar\r\n                                                <\/button>\r\n                                                <button class=\"btn btn-danger btn-small\" onclick=\"rejectPurchase(${p.id})\">\r\n                                                    \u274c Rejeitar\r\n                                                <\/button>\r\n                                            <\/td>\r\n                                        <\/tr>\r\n                                    `).join('')}\r\n                                <\/tbody>\r\n                            <\/table>\r\n                        `;\r\n                        \r\n                        \/\/ Atualizar contadores\r\n                        updateAdminCounters();\r\n                    }\r\n\r\n                    async function approvePurchase(purchaseId) {\r\n                        if (!confirm('Aprovar compra?')) return;\r\n                        \r\n                        const purchases = await getPurchases();\r\n                        const purchase = purchases.find(p => p.id === purchaseId);\r\n                        \r\n                        await updatePurchaseStatus(purchaseId, 'Aprovada', {\r\n                            approvedAt: new Date().toISOString()\r\n                        });\r\n                        \r\n                        \/\/ Add to stock\r\n                        const stock = await getStock();\r\n                        const existing = stock.find(s => s.userAppwriteId === purchase.userAppwriteId && s.productAppwriteId === purchase.productAppwriteId);\r\n                        \r\n                        if (existing) {\r\n                            existing.quantity += purchase.quantity;\r\n                            await updateStockQuantity(existing.id, existing.quantity);\r\n                        } else {\r\n                            const newStock = {\r\n                                id: Date.now(),\r\n                                userId: purchase.userId,\r\n                                userAppwriteId: purchase.userAppwriteId,\r\n                                productId: purchase.productId,\r\n                                productAppwriteId: purchase.productAppwriteId,\r\n                                productName: purchase.productName,\r\n                                quantity: purchase.quantity\r\n                            };\r\n                            \r\n                            try {\r\n                                await createDocument(appwriteConfig.collections.stock, newStock);\r\n                            } catch (error) {\r\n                                console.log('Salvando estoque no LocalStorage:', error.message);\r\n                            }\r\n                            \r\n                            stock.push(newStock);\r\n                            await setStock(stock);\r\n                        }\r\n                        \r\n                        alert('Compra aprovada!');\r\n                        await loadPendingApprovals();\r\n                        await loadAllPurchases();\r\n                        updateAdminCounters();\r\n                    }\r\n\r\n                    async function rejectPurchase(purchaseId) {\r\n                        const reason = prompt('Motivo da rejei\u00e7\u00e3o:');\r\n                        if (reason === null) return;\r\n                        \r\n                        await updatePurchaseStatus(purchaseId, 'Rejeitada', {\r\n                            rejectionReason: reason || 'N\u00e3o especificado',\r\n                            rejectedAt: new Date().toISOString()\r\n                        });\r\n                        \r\n                        alert('Compra rejeitada!');\r\n                        await loadPendingApprovals();\r\n                        await loadAllPurchases();\r\n                        updateAdminCounters();\r\n                    }\r\n\r\n                    async function loadAllUsers() {\r\n                        const users = (await getUsers()).filter(u => u.role !== 'admin');\r\n                        const list = document.getElementById('usersList');\r\n                        \r\n                        if (!list) return;\r\n                        \r\n                        if (users.length === 0) {\r\n                            list.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Nenhum usu\u00e1rio cadastrado<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        list.innerHTML = `\r\n                            <div style=\"background: #dbeafe; padding: 15px; border-radius: 8px; margin-bottom: 20px; text-align: center;\">\r\n                                <h3 style=\"margin: 0; color: #1e40af;\">\ud83d\udc65 Total de Usu\u00e1rios: <strong>${users.length}<\/strong><\/h3>\r\n                            <\/div>\r\n                            <table>\r\n                                <thead>\r\n                                    <tr>\r\n                                        <th>Nome<\/th>\r\n                                        <th>Email<\/th>\r\n                                        <th>Telefone<\/th>\r\n                                        <th>Cadastro<\/th>\r\n                                        <th>A\u00e7\u00f5es<\/th>\r\n                                    <\/tr>\r\n                                <\/thead>\r\n                                <tbody>\r\n                                    ${users.map(u => `\r\n                                        <tr>\r\n                                            <td>${u.name}<\/td>\r\n                                            <td>${u.email}<\/td>\r\n                                            <td>${u.phone || 'N\u00e3o informado'}<\/td>\r\n                                            <td>${formatDate(u.createdAt)}<\/td>\r\n                                            <td>\r\n                                                <button class=\"btn btn-primary btn-small\" onclick=\"editUser('${u.$id || u.id}')\" title=\"Editar usu\u00e1rio\">\r\n                                                    \u270f\ufe0f Editar\r\n                                                <\/button>\r\n                                                <button class=\"btn btn-danger btn-small\" onclick=\"deleteUser('${u.$id || u.id}')\" title=\"Excluir usu\u00e1rio\" style=\"margin-left: 5px;\">\r\n                                                    \ud83d\uddd1\ufe0f Excluir\r\n                                                <\/button>\r\n                                            <\/td>\r\n                                        <\/tr>\r\n                                    `).join('')}\r\n                                <\/tbody>\r\n                            <\/table>\r\n                        `;\r\n                    }\r\n                    \r\n                    async function editUser(userId) {\r\n                        const users = await getUsers();\r\n                        const user = users.find(u => (u.$id === userId || u.id === userId));\r\n                        \r\n                        if (!user) {\r\n                            alert('Usu\u00e1rio n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        const newName = prompt('Nome:', user.name);\r\n                        if (newName === null) return;\r\n                        \r\n                        const newPhone = prompt('Telefone:', user.phone || '');\r\n                        if (newPhone === null) return;\r\n                        \r\n                        try {\r\n                            \/\/ Atualizar no localStorage\r\n                            user.name = newName;\r\n                            user.phone = newPhone;\r\n                            await setUsers(users);\r\n                            \r\n                            alert('\u2705 Usu\u00e1rio atualizado com sucesso!');\r\n                            await loadAllUsers();\r\n                        } catch (error) {\r\n                            console.error('Erro ao atualizar usu\u00e1rio:', error);\r\n                            alert('\u274c Erro ao atualizar usu\u00e1rio: ' + error.message);\r\n                        }\r\n                    }\r\n                    \r\n                    async function deleteUser(userId) {\r\n                        if (!confirm('\u26a0\ufe0f Tem certeza que deseja excluir este usu\u00e1rio?\\n\\nEsta a\u00e7\u00e3o n\u00e3o pode ser desfeita!')) return;\r\n                        \r\n                        try {\r\n                            const users = await getUsers();\r\n                            const updatedUsers = users.filter(u => u.$id !== userId && u.id !== userId);\r\n                            await setUsers(updatedUsers);\r\n                            \r\n                            alert('\u2705 Usu\u00e1rio exclu\u00eddo com sucesso!');\r\n                            await loadAllUsers();\r\n                        } catch (error) {\r\n                            console.error('Erro ao excluir usu\u00e1rio:', error);\r\n                            alert('\u274c Erro ao excluir usu\u00e1rio: ' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    async function loadAdminProducts() {\r\n                        console.log('\ud83d\udd04 Carregando lista de produtos no admin...');\r\n                        \r\n                        \/\/ For\u00e7ar limpeza do cache antes de carregar\r\n                        localStorage.removeItem('products');\r\n                        \r\n                        const products = await getProducts();\r\n                        const list = document.getElementById('adminProductsList');\r\n                        \r\n                        console.log('\ud83d\udccb Total de produtos encontrados:', products.length);\r\n                        console.log('\ud83d\udccb Lista de produtos:', products);\r\n                        \r\n                        if (!list) {\r\n                            console.error('\u274c Elemento adminProductsList n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        if (products.length === 0) {\r\n                            list.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Nenhum produto cadastrado<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        list.innerHTML = `\r\n                            <table>\r\n                                <thead>\r\n                                    <tr>\r\n                                        <th>Nome<\/th>\r\n                                        <th>Pre\u00e7o<\/th>\r\n                                        <th>Estoque<\/th>\r\n                                        <th>Status<\/th>\r\n                                        <th>A\u00e7\u00f5es<\/th>\r\n                                    <\/tr>\r\n                                <\/thead>\r\n                                <tbody>\r\n                                    ${products.map(p => {\r\n                                        const statusClass = p.active ? 'aprovada' : 'rejeitada';\r\n                                        const productId = p.$id || p.id; \/\/ Usar $id do Appwrite\r\n                                        const stock = p.stock || 0;\r\n                                        const stockBadge = stock > 10 ? 'aprovada' : stock > 0 ? 'pendente' : 'rejeitada';\r\n                                        return `\r\n                                        <tr>\r\n                                            <td>${p.name}<\/td>\r\n                                            <td>R$ ${formatCurrency(p.price)}<\/td>\r\n                                            <td><span class=\"badge badge-${stockBadge}\">${stock} un.<\/span><\/td>\r\n                                            <td><span class=\"badge badge-${statusClass}\">${p.active ? 'Ativo' : 'Inativo'}<\/span><\/td>\r\n                                            <td>\r\n                                                <button class=\"btn btn-primary btn-small\" onclick=\"openEditPriceModal('${productId}')\" style=\"margin-right: 5px;\">\u270f\ufe0f Editar<\/button>\r\n                                                <button class=\"btn btn-danger btn-small\" onclick=\"deleteProduct('${productId}')\">\ud83d\uddd1\ufe0f Excluir<\/button>\r\n                                            <\/td>\r\n                                        <\/tr>\r\n                                    `}).join('')}\r\n                                <\/tbody>\r\n                            <\/table>\r\n                        `;\r\n                        console.log('\u2705 Lista de produtos atualizada na tela');\r\n                    }\r\n\r\n                    async function loadCatalogProducts() {\r\n                        console.log('\ud83d\udd04 Carregando cat\u00e1logo de produtos...');\r\n                        const products = await getProducts();\r\n                        const list = document.getElementById('catalogProductsList');\r\n                        \r\n                        console.log('\ud83d\udce6 Produtos recebidos:', products);\r\n                        console.log('\ud83d\udce6 Quantidade:', products.length);\r\n                        \r\n                        if (!list) {\r\n                            console.error('\u274c Elemento catalogProductsList n\u00e3o encontrado!');\r\n                            console.error('\u274c Verifique se o elemento existe no DOM');\r\n                            return;\r\n                        }\r\n                        \r\n                        console.log('\u2705 Elemento catalogProductsList encontrado:', list);\r\n                        \r\n                        if (products.length === 0) {\r\n                            list.innerHTML = '<p style=\"text-align:center;color:#6b7280;grid-column:1\/-1;\">Nenhum produto cadastrado<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        console.log('\ud83d\udd28 Gerando HTML para', products.length, 'produtos...');\r\n                        \r\n                        const htmlContent = products.map(p => {\r\n                            const productId = p.$id || p.id;\r\n                            const statusClass = p.active ? 'aprovada' : 'rejeitada';\r\n                            const statusText = p.active ? '\u2705 Ativo' : '\u274c Inativo';\r\n                            \r\n                            console.log('\ud83d\udccb Processando produto:', p.name, 'ID:', productId);\r\n                            \r\n                            return `\r\n                            <div class=\"card\" style=\"padding: 0; overflow: hidden;\">\r\n                                <img decoding=\"async\" \r\n                                    src=\"${p.image || getPlaceholderDataURI('Produto', 400, 300)}\" \r\n                                    alt=\"${p.name}\" \r\n                                    style=\"width: 100%; height: 200px; object-fit: cover;\"\r\n                                    onerror=\"this.src='${getPlaceholderDataURI('Produto', 400, 300)}'\"\r\n                                >\r\n                                <div style=\"padding: 20px;\">\r\n                                    <div style=\"display: flex; justify-content: space-between; align-items: start; margin-bottom: 10px;\">\r\n                                        <h3 style=\"margin: 0; font-size: 18px; color: #1f2937; flex: 1;\">${p.name}<\/h3>\r\n                                        <span class=\"badge badge-${statusClass}\" style=\"margin-left: 10px;\">${statusText}<\/span>\r\n                                    <\/div>\r\n                                    \r\n                                    <p style=\"color: #6b7280; font-size: 14px; margin: 10px 0; line-height: 1.5; max-height: 60px; overflow: hidden;\">\r\n                                        ${p.description || 'Sem descri\u00e7\u00e3o'}\r\n                                    <\/p>\r\n                                    \r\n                                    <div class=\"card-info\" style=\"margin: 15px 0;\">\r\n                                        <div class=\"card-info-item\">\r\n                                            <span class=\"label\">\ud83d\udcb0 Pre\u00e7o:<\/span>\r\n                                            <span class=\"value\" style=\"color: #059669; font-weight: bold; font-size: 18px;\">R$ ${formatCurrency(p.price)}<\/span>\r\n                                        <\/div>\r\n                                        <div class=\"card-info-item\">\r\n                                            <span class=\"label\">\ud83d\udce6 Estoque:<\/span>\r\n                                            <span class=\"value\"><strong>${p.stock || 0}<\/strong> unidades<\/span>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                    \r\n                                    <div style=\"display: flex; gap: 8px; margin-top: 15px;\">\r\n                                        <button class=\"btn btn-primary btn-small\" onclick=\"openEditProductModal('${productId}')\" style=\"flex: 1;\">\r\n                                            \u270f\ufe0f Editar\r\n                                        <\/button>\r\n                                        <button class=\"btn btn-danger btn-small\" onclick=\"deleteProduct('${productId}')\">\r\n                                            \ud83d\uddd1\ufe0f\r\n                                        <\/button>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                            `;\r\n                        }).join('');\r\n                        \r\n                        console.log('\ud83d\udcdd HTML gerado, tamanho:', htmlContent.length, 'caracteres');\r\n                        console.log('\ud83d\uddbc\ufe0f Inserindo HTML no elemento...');\r\n                        \r\n                        list.innerHTML = htmlContent;\r\n                        \r\n                        console.log('\u2705 Cat\u00e1logo carregado com', products.length, 'produtos');\r\n                        console.log('\ud83d\udcca InnerHTML do elemento:', list.innerHTML.substring(0, 200) + '...');\r\n                    }\r\n                    \r\n                    async function openEditProductModal(productId) {\r\n                        console.log('\u270f\ufe0f Abrindo modal de editar produto:', productId);\r\n                        const products = await getProducts();\r\n                        const product = products.find(p => p.$id === productId || p.id === productId);\r\n                        \r\n                        if (!product) {\r\n                            alert('\u274c Produto n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Preencher campos do formul\u00e1rio\r\n                        document.getElementById('editProdId').value = productId;\r\n                        document.getElementById('editProdName').value = product.name;\r\n                        document.getElementById('editProdPrice').value = product.price;\r\n                        document.getElementById('editProdStock').value = product.stock || 0;\r\n                        document.getElementById('editProdDescription').value = product.description || '';\r\n                        document.getElementById('editProdActive').value = product.active !== false ? 'true' : 'false';\r\n                        document.getElementById('editProdCurrentImage').src = product.image || getPlaceholderDataURI('Produto', 400, 300);\r\n                        document.getElementById('editProdImageFile').value = '';\r\n                        document.getElementById('editProdImageUrl').value = '';\r\n                        \r\n                        const modal = document.getElementById('editProductModal');\r\n                        const form = document.getElementById('editProductForm');\r\n                        \r\n                        \/\/ Anexar listener ao formul\u00e1rio\r\n                        if (!form._listenerAttached) {\r\n                            form.addEventListener('submit', handleEditProduct);\r\n                            form._listenerAttached = true;\r\n                        }\r\n                        \r\n                        modal.classList.add('active');\r\n                        console.log('\u2705 Modal de editar produto aberto');\r\n                    }\r\n                    \r\n                    async function handleEditProduct(e) {\r\n                        e.preventDefault();\r\n                        \r\n                        const productId = document.getElementById('editProdId').value;\r\n                        const name = document.getElementById('editProdName').value.trim();\r\n                        const price = parseFloat(document.getElementById('editProdPrice').value);\r\n                        const stock = parseInt(document.getElementById('editProdStock').value) || 0;\r\n                        const description = document.getElementById('editProdDescription').value.trim();\r\n                        const active = document.getElementById('editProdActive').value === 'true';\r\n                        const imageFile = document.getElementById('editProdImageFile').files[0];\r\n                        const imageUrl = document.getElementById('editProdImageUrl').value.trim();\r\n                        \r\n                        if (!name || !description) {\r\n                            alert('\u274c Por favor, preencha todos os campos obrigat\u00f3rios!');\r\n                            return;\r\n                        }\r\n                        \r\n                        if (isNaN(price) || price <= 0) {\r\n                            alert('\u274c Por favor, insira um pre\u00e7o v\u00e1lido maior que zero!');\r\n                            return;\r\n                        }\r\n                        \r\n                        try {\r\n                            console.log('\ud83d\udcbe Atualizando produto:', productId);\r\n                            \r\n                            \/\/ Buscar produto atual para manter a imagem se n\u00e3o for alterada\r\n                            const products = await getProducts();\r\n                            const currentProduct = products.find(p => p.$id === productId || p.id === productId);\r\n                            let finalImageUrl = currentProduct?.image || '';\r\n                            \r\n                            \/\/ Verificar se h\u00e1 nova imagem para upload\r\n                            if (imageFile) {\r\n                                console.log('\ud83d\udce4 Fazendo upload de nova imagem...');\r\n                                try {\r\n                                    const uploadResult = await storage.createFile(\r\n                                        appwriteConfig.bucketId,\r\n                                        'unique()',\r\n                                        imageFile\r\n                                    );\r\n                                    finalImageUrl = `${appwriteConfig.endpoint}\/storage\/buckets\/${appwriteConfig.bucketId}\/files\/${uploadResult.$id}\/view?project=${appwriteConfig.projectId}`;\r\n                                    console.log('\u2705 Imagem enviada:', finalImageUrl);\r\n                                } catch (uploadError) {\r\n                                    console.error('\u274c Erro ao fazer upload da imagem:', uploadError);\r\n                                    alert('\u26a0\ufe0f Erro ao fazer upload da imagem. Continuando com a imagem atual.');\r\n                                }\r\n                            } else if (imageUrl) {\r\n                                \/\/ Usar URL fornecida\r\n                                finalImageUrl = imageUrl;\r\n                            }\r\n                            \r\n                            \/\/ Atualizar no Appwrite\r\n                            const updateData = {\r\n                                name,\r\n                                price,\r\n                                stock,\r\n                                description,\r\n                                active,\r\n                                image: finalImageUrl\r\n                            };\r\n                            \r\n                            await databases.updateDocument(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products,\r\n                                productId,\r\n                                updateData\r\n                            );\r\n                            \r\n                            console.log('\u2705 Produto atualizado no Appwrite!');\r\n                            \r\n                            \/\/ Atualizar no localStorage\/cache\r\n                            const productIndex = products.findIndex(p => p.$id === productId || p.id === productId);\r\n                            if (productIndex !== -1) {\r\n                                products[productIndex] = { ...products[productIndex], ...updateData };\r\n                                await setProducts(products);\r\n                                console.log('\u2705 Cache atualizado!');\r\n                            }\r\n                            \r\n                            alert('\u2705 Produto atualizado com sucesso!');\r\n                            closeModal('editProductModal');\r\n                            document.getElementById('editProductForm').reset();\r\n                            \r\n                            \/\/ Recarregar cat\u00e1logo\r\n                            await loadCatalogProducts();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao atualizar produto:', error);\r\n                            alert('\u274c Erro ao atualizar produto: ' + error.message);\r\n                        }\r\n                    }\r\n                    \r\n                    async function openEditPriceModal(productId) {\r\n                        console.log('\u270f\ufe0f Abrindo modal de editar produto:', productId);\r\n                        const products = await getProducts();\r\n                        const product = products.find(p => p.$id === productId || p.id === productId);\r\n                        \r\n                        if (!product) {\r\n                            alert('\u274c Produto n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        document.getElementById('editProductId').value = productId;\r\n                        document.getElementById('editProductName').value = product.name;\r\n                        document.getElementById('editProductCurrentPrice').value = `R$ ${formatCurrency(product.price)}`;\r\n                        document.getElementById('editProductCurrentStock').value = `${product.stock || 0} unidades`;\r\n                        document.getElementById('editProductNewPrice').value = product.price;\r\n                        document.getElementById('editProductNewStock').value = product.stock || 0;\r\n                        document.getElementById('editProductNewPrice').focus();\r\n                        \r\n                        const modal = document.getElementById('editPriceModal');\r\n                        const form = document.getElementById('editPriceForm');\r\n                        \r\n                        \/\/ Anexar listener ao formul\u00e1rio\r\n                        if (!form._listenerAttached) {\r\n                            form.addEventListener('submit', handleEditPrice);\r\n                            form._listenerAttached = true;\r\n                        }\r\n                        \r\n                        modal.classList.add('active');\r\n                        console.log('\u2705 Modal de editar produto aberto');\r\n                    }\r\n                    \r\n                    async function handleEditPrice(e) {\r\n                        e.preventDefault();\r\n                        \r\n                        const productId = document.getElementById('editProductId').value;\r\n                        const newPrice = parseFloat(document.getElementById('editProductNewPrice').value);\r\n                        const newStock = parseInt(document.getElementById('editProductNewStock').value);\r\n                        \r\n                        if (isNaN(newPrice) || newPrice <= 0) {\r\n                            alert('\u274c Por favor, insira um pre\u00e7o v\u00e1lido maior que zero!');\r\n                            return;\r\n                        }\r\n                        \r\n                        if (isNaN(newStock) || newStock < 0) {\r\n                            alert('\u274c Por favor, insira um estoque v\u00e1lido (0 ou mais)!');\r\n                            return;\r\n                        }\r\n                        \r\n                        try {\r\n                            console.log('\ud83d\udcbe Atualizando produto:', productId, 'Novo pre\u00e7o:', newPrice, 'Novo estoque:', newStock);\r\n                            \r\n                            \/\/ Atualizar no Appwrite\r\n                            await databases.updateDocument(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products,\r\n                                productId,\r\n                                { \r\n                                    price: newPrice,\r\n                                    stock: newStock\r\n                                }\r\n                            );\r\n                            \r\n                            console.log('\u2705 Produto atualizado no Appwrite!');\r\n                            \r\n                            \/\/ Atualizar no localStorage\/cache\r\n                            const products = await getProducts();\r\n                            const productIndex = products.findIndex(p => p.$id === productId || p.id === productId);\r\n                            if (productIndex !== -1) {\r\n                                products[productIndex].price = newPrice;\r\n                                products[productIndex].stock = newStock;\r\n                                await setProducts(products);\r\n                                console.log('\u2705 Cache atualizado!');\r\n                            }\r\n                            \r\n                            alert(`\u2705 Produto atualizado com sucesso!\\nPre\u00e7o: R$ ${formatCurrency(newPrice)}\\nEstoque: ${newStock} unidades`);\r\n                            closeModal('editPriceModal');\r\n                            document.getElementById('editPriceForm').reset();\r\n                            \r\n                            \/\/ Recarregar lista de produtos\r\n                            await loadAdminProducts();\r\n                            await loadCatalogProducts();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao atualizar produto:', error);\r\n                            alert('\u274c Erro ao atualizar produto: ' + error.message);\r\n                        }\r\n                    }\r\n                    \r\n                    function openAddProductModal() {\r\n                        console.log('\ud83d\udd13 Abrindo modal de adicionar produto...');\r\n                        const modal = document.getElementById('addProductModal');\r\n                        const form = document.getElementById('addProductForm');\r\n                        \r\n                        if (!modal) {\r\n                            console.error('\u274c Modal addProductModal n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        if (!form) {\r\n                            console.error('\u274c Formul\u00e1rio addProductForm n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        console.log('\u2705 Modal e formul\u00e1rio encontrados');\r\n                        \r\n                        \/\/ Garantir que o listener est\u00e1 anexado\r\n                        if (!form._listenerAttached) {\r\n                            console.log('\ud83d\udd17 Anexando listener ao formul\u00e1rio...');\r\n                            form.addEventListener('submit', function(e) {\r\n                                console.log('\ud83d\udce8 Submit event disparado no addProductForm!');\r\n                                handleAddProduct(e);\r\n                            });\r\n                            form._listenerAttached = true;\r\n                            console.log('\u2705 Listener anexado com sucesso');\r\n                        } else {\r\n                            console.log('\u2139\ufe0f Listener j\u00e1 estava anexado');\r\n                        }\r\n                        \r\n                        modal.classList.add('active');\r\n                        console.log('\u2705 Modal aberto');\r\n                    }\r\n\r\n                    async function handleAddProduct(e) {\r\n                        console.log('\ud83d\udd25 handleAddProduct CHAMADO!', e);\r\n                        e.preventDefault();\r\n                        \r\n                        try {\r\n                            const productName = document.getElementById('productName').value;\r\n                            const productDescription = document.getElementById('productDescription').value;\r\n                            const productPrice = parseFloat(document.getElementById('productPrice').value);\r\n                            const productImage = document.getElementById('productImage').value || getPlaceholderDataURI('Produto', 400, 300);\r\n                            \r\n                            console.log('\ud83d\udcdd Valores do formul\u00e1rio:', { productName, productDescription, productPrice, productImage });\r\n                            \r\n                            if (!productName || !productDescription || !productPrice) {\r\n                                alert('Preencha todos os campos obrigat\u00f3rios!');\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ SIMPLIFICADO: Enviar APENAS os atributos essenciais\r\n                            const product = {\r\n                                name: productName,\r\n                                description: productDescription,\r\n                                price: productPrice,\r\n                                image: productImage,\r\n                                active: true\r\n                            };\r\n                            \r\n                            console.log('\ud83d\udcbe Tentando salvar produto com estrutura SIMPLIFICADA:', product);\r\n                            console.log('\ud83d\udccb Collection ID:', appwriteConfig.collections.products);\r\n                            console.log('\ud83d\udccb Database ID:', appwriteConfig.databaseId);\r\n                            \r\n                            \/\/ Salvar no Appwrite\r\n                            const result = await createDocument(appwriteConfig.collections.products, product);\r\n                            console.log('\u2705 Produto salvo no Appwrite com sucesso!', result);\r\n                            console.log('\ud83c\udd94 ID do documento criado:', result.$id);\r\n                            console.log('\ud83d\udccd Localiza\u00e7\u00e3o: Database > Collections > products > Documento', result.$id);\r\n                            \r\n                            alert('\u2705 Produto adicionado com sucesso!\\n\\n' +\r\n                                '\ud83d\udccd Salvo em: Database > Collections > products\\n' +\r\n                                '\ud83c\udd94 ID: ' + result.$id + '\\n\\n' +\r\n                                '\u26a0\ufe0f N\u00c3O procure no Storage!\\n' +\r\n                                'Clique no bot\u00e3o \"\ud83d\udccb Verificar Produtos\" para ver todos.');\r\n                            closeModal('addProductModal');\r\n                            e.target.reset();\r\n                            \r\n                            \/\/ Recarregar todas as listas (getProducts sincroniza cache)\r\n                            await loadAdminProducts();\r\n                            await loadCatalogProducts();\r\n                            await loadProducts();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao salvar produto no Appwrite:', error);\r\n                            console.error('\u274c Detalhes do erro:', error.message);\r\n                            console.error('\u274c C\u00f3digo do erro:', error.code);\r\n                            console.error('\u274c Resposta completa:', error.response);\r\n                            \r\n                            \/\/ Mensagem mais informativa\r\n                            let errorMsg = 'Erro ao adicionar produto: ' + error.message;\r\n                            \r\n                            if (error.code === 400 || error.message.includes('attribute')) {\r\n                                errorMsg += '\\n\\n\u26a0\ufe0f PROBLEMA COM ATRIBUTOS!\\n\\n';\r\n                                errorMsg += 'Verifique no Appwrite Console se a collection \"products\" tem estes atributos:\\n\\n';\r\n                                errorMsg += '\u2022 name (string, obrigat\u00f3rio)\\n';\r\n                                errorMsg += '\u2022 description (string, obrigat\u00f3rio)\\n';\r\n                                errorMsg += '\u2022 price (float\/double, obrigat\u00f3rio)\\n';\r\n                                errorMsg += '\u2022 image (string, obrigat\u00f3rio)\\n';\r\n                                errorMsg += '\u2022 active (boolean, obrigat\u00f3rio)\\n\\n';\r\n                                errorMsg += 'Clique em \"\ud83d\udd27 Testar Conex\u00e3o\" para diagn\u00f3stico completo.';\r\n                            }\r\n                            \r\n                            alert(errorMsg);\r\n                        }\r\n                    }\r\n\r\n                    async function deleteProduct(productId) {\r\n                        if (!confirm('\u26a0\ufe0f Tem certeza que deseja excluir este produto?\\n\\nEsta a\u00e7\u00e3o n\u00e3o pode ser desfeita.')) return;\r\n                        \r\n                        try {\r\n                            console.log('\ud83d\uddd1\ufe0f Iniciando exclus\u00e3o do produto:', productId);\r\n                            await deleteProductById(productId);\r\n                            \r\n                            \/\/ Aguardar um pouco para garantir que o Appwrite processou\r\n                            await new Promise(resolve => setTimeout(resolve, 500));\r\n                            \r\n                            alert('\u2705 Produto exclu\u00eddo com sucesso!');\r\n                            \r\n                            \/\/ Recarregar as listas\r\n                            await loadAdminProducts();\r\n                            await loadCatalogProducts();\r\n                            console.log('\u2705 Listas atualizadas');\r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao excluir produto:', error);\r\n                            alert('\u274c Erro ao excluir produto: ' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    async function handleImportProducts(e) {\r\n                        e.preventDefault();\r\n                        \r\n                        const file = document.getElementById('importFile').files[0];\r\n                        if (!file) {\r\n                            alert('Selecione um arquivo CSV!');\r\n                            return;\r\n                        }\r\n                        \r\n                        const reader = new FileReader();\r\n                        reader.onload = async function(event) {\r\n                            const text = event.target.result;\r\n                            const lines = text.split('\\n');\r\n                            let imported = 0;\r\n                            let errors = 0;\r\n                            \r\n                            console.log('\ud83d\udce5 Iniciando importa\u00e7\u00e3o de produtos...');\r\n                            console.log('\ud83d\udcc4 Total de linhas:', lines.length);\r\n                            \r\n                            \/\/ Pular a primeira linha (cabe\u00e7alho)\r\n                            for (let i = 1; i < lines.length; i++) {\r\n                                const line = lines[i].trim();\r\n                                if (!line) continue;\r\n                                \r\n                                const parts = line.split(',');\r\n                                if (parts.length >= 3) {\r\n                                    \/\/ SIMPLIFICADO: Apenas atributos essenciais\r\n                                    const newProduct = {\r\n                                        name: parts[0].trim(),\r\n                                        price: parseFloat(parts[1].trim()),\r\n                                        description: parts[2].trim(),\r\n                                        image: parts[3]?.trim() || getPlaceholderDataURI('Produto', 400, 300),\r\n                                        active: true\r\n                                    };\r\n                                    \r\n                                    console.log(`\ud83d\udce6 Importando produto ${i}:`, newProduct.name);\r\n                                    \r\n                                    try {\r\n                                        \/\/ Salvar APENAS no Appwrite (fonte \u00fanica de verdade)\r\n                                        await createDocument(appwriteConfig.collections.products, newProduct);\r\n                                        imported++;\r\n                                        console.log(`\u2705 Produto ${i} importado com sucesso`);\r\n                                    } catch (error) {\r\n                                        errors++;\r\n                                        console.error(`\u274c Erro ao importar produto ${i}:`, error.message);\r\n                                    }\r\n                                }\r\n                            }\r\n                            \r\n                            console.log('\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501');\r\n                            console.log(`\u2705 Importa\u00e7\u00e3o conclu\u00edda: ${imported} produtos importados`);\r\n                            if (errors > 0) {\r\n                                console.log(`\u26a0\ufe0f ${errors} produtos com erro`);\r\n                            }\r\n                            \r\n                            alert(`\ud83d\udce5 Importa\u00e7\u00e3o Conclu\u00edda!\\n\\n\u2705 ${imported} produtos importados\\n${errors > 0 ? '\u26a0\ufe0f ' + errors + ' produtos com erro' : ''}\\n\\nClique em \"\ud83d\udccb Verificar Produtos\" para ver a lista.`);\r\n                            \r\n                            \/\/ Recarregar lista (busca do Appwrite, n\u00e3o do LocalStorage)\r\n                            await loadAdminProducts();\r\n                            e.target.reset();\r\n                        };\r\n                        reader.readAsText(file);\r\n                    }\r\n\r\n                    async function loadShippedOrders() {\r\n                        const allSales = (await getSales()).filter(s => s.status === 'Enviado');\r\n                        const list = document.getElementById('shippedOrdersList');\r\n                        \r\n                        if (!list) return;\r\n                        \r\n                        \/\/ Definir a data atual no filtro se ainda n\u00e3o estiver definida\r\n                        const dateFilter = document.getElementById('shippedOrdersDateFilter');\r\n                        const today = new Date().toISOString().split('T')[0];\r\n                        \r\n                        if (dateFilter && !dateFilter.value) {\r\n                            dateFilter.value = today;\r\n                        }\r\n                        \r\n                        \/\/ Filtrar pedidos pela data selecionada no filtro\r\n                        const filterDate = dateFilter ? dateFilter.value : today;\r\n                        const sales = allSales.filter(sale => {\r\n                            const saleDate = new Date(sale.shippedAt || sale.createdAt);\r\n                            const saleDateStr = saleDate.toISOString().split('T')[0];\r\n                            return saleDateStr === filterDate;\r\n                        });\r\n                        \r\n                        if (sales.length === 0) {\r\n                            list.innerHTML = `\r\n                                <div style=\"background: #fef3c7; padding: 20px; border-radius: 8px; text-align: center; border-left: 4px solid #f59e0b;\">\r\n                                    <p style=\"margin: 0; color: #92400e; font-size: 16px;\">\r\n                                        \u26a0\ufe0f Nenhum pedido enviado encontrado para a data selecionada: <strong>${new Date(filterDate).toLocaleDateString('pt-BR')}<\/strong>\r\n                                    <\/p>\r\n                                <\/div>\r\n                            `;\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Buscar produtos, estoque e usu\u00e1rios para mostrar informa\u00e7\u00f5es completas\r\n                        const products = await getProducts();\r\n                        const stock = await getStock();\r\n                        const users = await getUsers();\r\n                        \r\n                        \/\/ Ordenar por data (mais recente primeiro)\r\n                        const sortedSales = sales.sort((a, b) => new Date(b.shippedAt || b.createdAt) - new Date(a.shippedAt || a.createdAt));\r\n                        \r\n                        \/\/ Gerar cards de forma ass\u00edncrona\r\n                        const cardsHtml = await Promise.all(sortedSales.map(async sale => {\r\n                            const product = products.find(p => (p.$id === sale.productAppwriteId || p.id === sale.productId));\r\n                            const productStock = stock.filter(s => s.productAppwriteId === sale.productAppwriteId || s.productId === sale.productId);\r\n                            const totalStock = productStock.reduce((sum, s) => sum + s.quantity, 0);\r\n                            const shippedDate = new Date(sale.shippedAt || sale.createdAt);\r\n                            \r\n                            \/\/ Buscar informa\u00e7\u00f5es do vendedor (quem enviou) do perfil do Appwrite\r\n                            const seller = users.find(u => u.$id === sale.userAppwriteId || u.id === sale.userAppwriteId);\r\n                            let sellerName = sale.userName || seller?.name || 'N\/A';\r\n                            let sellerEmail = 'N\/A';\r\n                            let sellerPhone = 'N\/A';\r\n                            \r\n                            \/\/ Tentar buscar informa\u00e7\u00f5es do perfil do vendedor\r\n                            if (seller && seller.$id) {\r\n                                try {\r\n                                    \/\/ Buscar prefer\u00eancias do usu\u00e1rio vendedor\r\n                                    const sellerPrefs = await databases.listDocuments(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.users\r\n                                    );\r\n                                    const sellerDoc = sellerPrefs.documents.find(u => u.$id === seller.$id);\r\n                                    \r\n                                    if (sellerDoc) {\r\n                                        sellerName = sellerDoc.name || sellerName;\r\n                                        sellerEmail = sellerDoc.email || seller.email || 'N\/A';\r\n                                        sellerPhone = sellerDoc.phone || 'N\/A';\r\n                                    } else {\r\n                                        sellerEmail = seller.email || 'N\/A';\r\n                                    }\r\n                                } catch (error) {\r\n                                    sellerEmail = seller.email || 'N\/A';\r\n                                }\r\n                            }\r\n                            \r\n                            \/\/ Buscar informa\u00e7\u00f5es do comprador (quem recebeu) do perfil do Appwrite\r\n                            const buyer = users.find(u => u.$id === sale.buyerAppwriteId || u.id === sale.buyerAppwriteId);\r\n                            let buyerEmail = 'N\/A';\r\n                            \r\n                            if (buyer && buyer.$id) {\r\n                                try {\r\n                                    const buyerPrefs = await databases.listDocuments(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.users\r\n                                    );\r\n                                    const buyerDoc = buyerPrefs.documents.find(u => u.$id === buyer.$id);\r\n                                    \r\n                                    if (buyerDoc) {\r\n                                        buyerEmail = buyerDoc.email || buyer.email || 'N\/A';\r\n                                    } else {\r\n                                        buyerEmail = buyer.email || 'N\/A';\r\n                                    }\r\n                                } catch (error) {\r\n                                    buyerEmail = buyer.email || 'N\/A';\r\n                                }\r\n                            }\r\n                            \r\n                            const imageHtml = product?.image \r\n                                ? `<img decoding=\"async\" src=\"${product.image}\" alt=\"${sale.productName}\" \r\n                                    style=\"width: 100%; height: 200px; object-fit: cover; border-radius: 8px; margin-bottom: 15px;\"\r\n                                    onerror=\"this.src='${getPlaceholderDataURI(sale.productName, 400, 200)}'\">` \r\n                                : `<img decoding=\"async\" src=\"${getPlaceholderDataURI(sale.productName, 400, 200)}\" alt=\"${sale.productName}\" \r\n                                    style=\"width: 100%; height: 200px; object-fit: cover; border-radius: 8px; margin-bottom: 15px;\">`;\r\n                            \r\n                            const phoneHtml = sellerPhone !== 'N\/A' \r\n                                ? `<p style=\"margin: 3px 0; font-size: 13px; color: #6b7280;\"><strong>\ud83d\udcf1 Telefone:<\/strong> ${sellerPhone}<\/p>` \r\n                                : '';\r\n                            \r\n                            \/\/ Etiqueta de envio - buscar da mesma forma que em \"Envios Pendentes\"\r\n                            let labelUrl = '';\r\n                            \r\n                            \/\/ Verificar se h\u00e1 etiqueta salva (prioridade: labelUrl > labelFileId)\r\n                            if (sale.labelUrl && sale.labelUrl.length > 0) {\r\n                                labelUrl = sale.labelUrl;\r\n                            } else if (sale.labelFileId && sale.labelFileId.length > 0) {\r\n                                labelUrl = `${appwriteConfig.endpoint}\/storage\/buckets\/${appwriteConfig.bucketId}\/files\/${sale.labelFileId}\/view?project=${appwriteConfig.projectId}`;\r\n                            }\r\n                            \r\n                            return `\r\n                                <div style=\"background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.1); border: 1px solid #e5e7eb;\">\r\n                                    <div style=\"display: flex; gap: 15px; padding: 15px;\">\r\n                                        <!-- Imagem do produto em miniatura -->\r\n                                        <div style=\"flex-shrink: 0;\">\r\n                                            <img decoding=\"async\" src=\"${product?.image || getPlaceholderDataURI(sale.productName, 100, 100)}\" \r\n                                                alt=\"${sale.productName}\" \r\n                                                style=\"width: 80px; height: 80px; object-fit: cover; border-radius: 8px; border: 2px solid #e5e7eb;\"\r\n                                                onerror=\"this.src='${getPlaceholderDataURI(sale.productName, 100, 100)}'\">\r\n                                        <\/div>\r\n                                        \r\n                                        <!-- Informa\u00e7\u00f5es do pedido -->\r\n                                        <div style=\"flex: 1; min-width: 0;\">\r\n                                            <div style=\"display: flex; justify-content: space-between; align-items: start; margin-bottom: 8px; gap: 10px;\">\r\n                                                <h4 style=\"margin: 0; color: #111827; font-size: 16px; font-weight: 600; line-height: 1.3;\">${sale.productName}<\/h4>\r\n                                                <span style=\"background: #dcfce7; color: #166534; padding: 4px 12px; border-radius: 12px; font-size: 12px; font-weight: 600; white-space: nowrap; flex-shrink: 0;\">\r\n                                                    \u2705 Enviado\r\n                                                <\/span>\r\n                                            <\/div>\r\n                                            \r\n                                            <div style=\"display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 8px; font-size: 13px; color: #6b7280;\">\r\n                                                <span><strong>Quantidade:<\/strong> ${sale.quantity} un.<\/span>\r\n                                                <span><strong>Data:<\/strong> ${shippedDate.toLocaleDateString('pt-BR')}<\/span>\r\n                                                <span><strong>Hora:<\/strong> ${shippedDate.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })}<\/span>\r\n                                            <\/div>\r\n                                            \r\n                                            <div style=\"font-size: 12px; color: #6b7280; margin-bottom: 12px;\">\r\n                                                <div style=\"margin-bottom: 4px;\">\r\n                                                    <strong>Vendedor:<\/strong> ${sellerName} ${sellerEmail !== 'N\/A' ? `(${sellerEmail})` : ''}\r\n                                                <\/div>\r\n                                                <div>\r\n                                                    <strong>Cliente:<\/strong> ${buyerEmail}\r\n                                                <\/div>\r\n                                            <\/div>\r\n                                            \r\n                                            ${labelUrl \r\n                                                ? `<button onclick=\"window.open('${labelUrl}', '_blank')\" \r\n                                                        style=\"background: #3b82f6; color: white; border: none; padding: 8px 16px; border-radius: 6px; font-size: 13px; font-weight: 600; cursor: pointer; display: flex; align-items: center; gap: 6px; transition: background 0.2s;\"\r\n                                                        onmouseover=\"this.style.background='#2563eb'\" \r\n                                                        onmouseout=\"this.style.background='#3b82f6'\">\r\n                                                        \ud83c\udff7\ufe0f Ver Etiqueta\r\n                                                    <\/button>`\r\n                                                : `<button disabled\r\n                                                        style=\"background: #d1d5db; color: #6b7280; border: none; padding: 8px 16px; border-radius: 6px; font-size: 13px; font-weight: 600; cursor: not-allowed; display: flex; align-items: center; gap: 6px;\">\r\n                                                        \u26a0\ufe0f Sem Etiqueta\r\n                                                    <\/button>`\r\n                                            }\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            `;\r\n                        }));\r\n                        \r\n                        list.innerHTML = `\r\n                            <div style=\"background: #dcfce7; padding: 15px; border-radius: 8px; margin-bottom: 20px; text-align: center;\">\r\n                                <h3 style=\"margin: 0; color: #166534;\">\u2705 Total de Pedidos Enviados: <strong>${sales.length}<\/strong><\/h3>\r\n                            <\/div>\r\n                            <div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: 20px;\">\r\n                                ${cardsHtml.join('')}\r\n                            <\/div>\r\n                        `;\r\n                        \r\n                        \/\/ Atualizar contadores\r\n                        updateAdminCounters();\r\n                    }\r\n\r\n                    function filterShippedOrdersByDate() {\r\n                        const dateFilter = document.getElementById('shippedOrdersDateFilter');\r\n                        const filterDate = dateFilter ? dateFilter.value : '';\r\n                        \r\n                        if (!filterDate) {\r\n                            loadShippedOrders();\r\n                            return;\r\n                        }\r\n                        \r\n                        console.log('\ud83d\udd0d Filtrando pedidos enviados por data:', filterDate);\r\n                        \r\n                        getSales().then(allSales => {\r\n                            const sales = allSales.filter(s => {\r\n                                if (s.status !== 'Enviado') return false;\r\n                                \r\n                                const saleDate = new Date(s.shippedAt || s.createdAt);\r\n                                const saleDateStr = saleDate.toISOString().split('T')[0];\r\n                                \r\n                                return saleDateStr === filterDate;\r\n                            });\r\n                            \r\n                            console.log(`\ud83d\udce6 Encontrados ${sales.length} pedidos para a data ${filterDate}`);\r\n                            \r\n                            const list = document.getElementById('shippedOrdersList');\r\n                            if (!list) return;\r\n                            \r\n                            if (sales.length === 0) {\r\n                                list.innerHTML = `\r\n                                    <div style=\"background: #fef3c7; padding: 20px; border-radius: 8px; text-align: center; border-left: 4px solid #f59e0b;\">\r\n                                        <p style=\"margin: 0; color: #92400e; font-size: 16px;\">\r\n                                            \u26a0\ufe0f Nenhum pedido enviado encontrado para a data selecionada: <strong>${new Date(filterDate).toLocaleDateString('pt-BR')}<\/strong>\r\n                                        <\/p>\r\n                                    <\/div>\r\n                                `;\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Recarregar com os pedidos filtrados (reutilizar l\u00f3gica)\r\n                            renderShippedOrders(sales);\r\n                        });\r\n                    }\r\n\r\n                    function clearShippedOrdersDateFilter() {\r\n                        const dateFilter = document.getElementById('shippedOrdersDateFilter');\r\n                        if (dateFilter) {\r\n                            const today = new Date().toISOString().split('T')[0];\r\n                            dateFilter.value = today;\r\n                        }\r\n                        loadShippedOrders();\r\n                    }\r\n\r\n                    async function renderShippedOrders(sales) {\r\n                        const list = document.getElementById('shippedOrdersList');\r\n                        if (!list) return;\r\n                        \r\n                        const products = await getProducts();\r\n                        const stock = await getStock();\r\n                        const users = await getUsers();\r\n                        \r\n                        const sortedSales = sales.sort((a, b) => new Date(b.shippedAt || b.createdAt) - new Date(a.shippedAt || a.createdAt));\r\n                        \r\n                        const cardsHtml = await Promise.all(sortedSales.map(async sale => {\r\n                            const product = products.find(p => (p.$id === sale.productAppwriteId || p.id === sale.productId));\r\n                            const productStock = stock.filter(s => s.productAppwriteId === sale.productAppwriteId || s.productId === sale.productId);\r\n                            const totalStock = productStock.reduce((sum, s) => sum + s.quantity, 0);\r\n                            const shippedDate = new Date(sale.shippedAt || sale.createdAt);\r\n                            \r\n                            const seller = users.find(u => u.$id === sale.userAppwriteId || u.id === sale.userAppwriteId);\r\n                            let sellerName = sale.userName || seller?.name || 'N\/A';\r\n                            let sellerEmail = 'N\/A';\r\n                            let sellerPhone = 'N\/A';\r\n                            \r\n                            if (seller && seller.$id) {\r\n                                try {\r\n                                    const sellerPrefs = await databases.listDocuments(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.users\r\n                                    );\r\n                                    const sellerDoc = sellerPrefs.documents.find(u => u.$id === seller.$id);\r\n                                    \r\n                                    if (sellerDoc) {\r\n                                        sellerName = sellerDoc.name || sellerName;\r\n                                        sellerEmail = sellerDoc.email || seller.email || 'N\/A';\r\n                                        sellerPhone = sellerDoc.phone || 'N\/A';\r\n                                    } else {\r\n                                        sellerEmail = seller.email || 'N\/A';\r\n                                    }\r\n                                } catch (error) {\r\n                                    sellerEmail = seller.email || 'N\/A';\r\n                                }\r\n                            }\r\n                            \r\n                            const buyer = users.find(u => u.$id === sale.buyerAppwriteId || u.id === sale.buyerAppwriteId);\r\n                            let buyerEmail = 'N\/A';\r\n                            \r\n                            if (buyer && buyer.$id) {\r\n                                try {\r\n                                    const buyerPrefs = await databases.listDocuments(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.users\r\n                                    );\r\n                                    const buyerDoc = buyerPrefs.documents.find(u => u.$id === buyer.$id);\r\n                                    \r\n                                    if (buyerDoc) {\r\n                                        buyerEmail = buyerDoc.email || buyer.email || 'N\/A';\r\n                                    } else {\r\n                                        buyerEmail = buyer.email || 'N\/A';\r\n                                    }\r\n                                } catch (error) {\r\n                                    buyerEmail = buyer.email || 'N\/A';\r\n                                }\r\n                            }\r\n                            \r\n                            const imageHtml = product?.image \r\n                                ? `<img decoding=\"async\" src=\"${product.image}\" alt=\"${sale.productName}\" \r\n                                    style=\"width: 100%; height: 200px; object-fit: cover; border-radius: 8px; margin-bottom: 15px;\"\r\n                                    onerror=\"this.src='${getPlaceholderDataURI(sale.productName, 400, 200)}'\">` \r\n                                : `<img decoding=\"async\" src=\"${getPlaceholderDataURI(sale.productName, 400, 200)}\" alt=\"${sale.productName}\" \r\n                                    style=\"width: 100%; height: 200px; object-fit: cover; border-radius: 8px; margin-bottom: 15px;\">`;\r\n                            \r\n                            const phoneHtml = sellerPhone !== 'N\/A' \r\n                                ? `<p style=\"margin: 3px 0; font-size: 13px; color: #6b7280;\"><strong>\ud83d\udcf1 Telefone:<\/strong> ${sellerPhone}<\/p>` \r\n                                : '';\r\n                            \r\n                            \/\/ Etiqueta de envio - buscar da mesma forma que em \"Envios Pendentes\"\r\n                            let labelUrl = '';\r\n                            \r\n                            \/\/ Verificar se h\u00e1 etiqueta salva (prioridade: labelUrl > labelFileId)\r\n                            if (sale.labelUrl && sale.labelUrl.length > 0) {\r\n                                labelUrl = sale.labelUrl;\r\n                            } else if (sale.labelFileId && sale.labelFileId.length > 0) {\r\n                                labelUrl = `${appwriteConfig.endpoint}\/storage\/buckets\/${appwriteConfig.bucketId}\/files\/${sale.labelFileId}\/view?project=${appwriteConfig.projectId}`;\r\n                            }\r\n                            \r\n                            return `\r\n                                <div style=\"background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.1); border: 1px solid #e5e7eb;\">\r\n                                    <div style=\"display: flex; gap: 15px; padding: 15px;\">\r\n                                        <!-- Imagem do produto em miniatura -->\r\n                                        <div style=\"flex-shrink: 0;\">\r\n                                            <img decoding=\"async\" src=\"${product?.image || getPlaceholderDataURI(sale.productName, 100, 100)}\" \r\n                                                alt=\"${sale.productName}\" \r\n                                                style=\"width: 80px; height: 80px; object-fit: cover; border-radius: 8px; border: 2px solid #e5e7eb;\"\r\n                                                onerror=\"this.src='${getPlaceholderDataURI(sale.productName, 100, 100)}'\">\r\n                                        <\/div>\r\n                                        \r\n                                        <!-- Informa\u00e7\u00f5es do pedido -->\r\n                                        <div style=\"flex: 1; min-width: 0;\">\r\n                                            <div style=\"display: flex; justify-content: space-between; align-items: start; margin-bottom: 8px; gap: 10px;\">\r\n                                                <h4 style=\"margin: 0; color: #111827; font-size: 16px; font-weight: 600; line-height: 1.3;\">${sale.productName}<\/h4>\r\n                                                <span style=\"background: #dcfce7; color: #166534; padding: 4px 12px; border-radius: 12px; font-size: 12px; font-weight: 600; white-space: nowrap; flex-shrink: 0;\">\r\n                                                    \u2705 Enviado\r\n                                                <\/span>\r\n                                            <\/div>\r\n                                            \r\n                                            <div style=\"display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 8px; font-size: 13px; color: #6b7280;\">\r\n                                                <span><strong>Quantidade:<\/strong> ${sale.quantity} un.<\/span>\r\n                                                <span><strong>Data:<\/strong> ${shippedDate.toLocaleDateString('pt-BR')}<\/span>\r\n                                                <span><strong>Hora:<\/strong> ${shippedDate.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })}<\/span>\r\n                                            <\/div>\r\n                                            \r\n                                            <div style=\"font-size: 12px; color: #6b7280; margin-bottom: 12px;\">\r\n                                                <div style=\"margin-bottom: 4px;\">\r\n                                                    <strong>Vendedor:<\/strong> ${sellerName} ${sellerEmail !== 'N\/A' ? `(${sellerEmail})` : ''}\r\n                                                <\/div>\r\n                                                <div>\r\n                                                    <strong>Cliente:<\/strong> ${buyerEmail}\r\n                                                <\/div>\r\n                                            <\/div>\r\n                                            \r\n                                            ${labelUrl \r\n                                                ? `<button onclick=\"window.open('${labelUrl}', '_blank')\" \r\n                                                        style=\"background: #3b82f6; color: white; border: none; padding: 8px 16px; border-radius: 6px; font-size: 13px; font-weight: 600; cursor: pointer; display: flex; align-items: center; gap: 6px; transition: background 0.2s;\"\r\n                                                        onmouseover=\"this.style.background='#2563eb'\" \r\n                                                        onmouseout=\"this.style.background='#3b82f6'\">\r\n                                                        \ud83c\udff7\ufe0f Ver Etiqueta\r\n                                                    <\/button>`\r\n                                                : `<button disabled\r\n                                                        style=\"background: #d1d5db; color: #6b7280; border: none; padding: 8px 16px; border-radius: 6px; font-size: 13px; font-weight: 600; cursor: not-allowed; display: flex; align-items: center; gap: 6px;\">\r\n                                                        \u26a0\ufe0f Sem Etiqueta\r\n                                                    <\/button>`\r\n                                            }\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            `;\r\n                        }));\r\n                        \r\n                        list.innerHTML = `\r\n                            <div style=\"background: #dcfce7; padding: 15px; border-radius: 8px; margin-bottom: 20px; text-align: center;\">\r\n                                <h3 style=\"margin: 0; color: #166534;\">\u2705 Total de Pedidos Enviados: <strong>${sales.length}<\/strong><\/h3>\r\n                            <\/div>\r\n                            <div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: 20px;\">\r\n                                ${cardsHtml.join('')}\r\n                            <\/div>\r\n                        `;\r\n                    }\r\n\r\n                    async function loadReturnOrders() {\r\n                        console.log('\ud83d\udd04 Carregando pedidos para retorno...');\r\n                        \r\n                        \/\/ Buscar todas as compras aprovadas (que foram enviadas aos clientes)\r\n                        const purchases = (await getPurchases()).filter(p => p.status === 'Aprovada');\r\n                        const list = document.getElementById('returnOrdersList');\r\n                        \r\n                        if (!list) {\r\n                            console.error('\u274c Elemento returnOrdersList n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        if (purchases.length === 0) {\r\n                            list.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Nenhuma compra dispon\u00edvel para retorno<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Buscar produtos para obter informa\u00e7\u00f5es completas\r\n                        const products = await getProducts();\r\n                        const users = await getUsers();\r\n                        \r\n                        \/\/ Agrupar compras por cliente\r\n                        const purchasesByUser = {};\r\n                        purchases.forEach(p => {\r\n                            const userId = p.userAppwriteId || p.userId;\r\n                            if (!purchasesByUser[userId]) {\r\n                                purchasesByUser[userId] = [];\r\n                            }\r\n                            purchasesByUser[userId].push(p);\r\n                        });\r\n                        \r\n                        list.innerHTML = `\r\n                            <div style=\"background: #eff6ff; padding: 15px; border-radius: 8px; margin-bottom: 20px; text-align: center;\">\r\n                                <h3 style=\"margin: 0; color: #1e40af;\">\ud83d\udcca Total de Compras Aprovadas: <strong>${purchases.length}<\/strong> | Clientes: <strong>${Object.keys(purchasesByUser).length}<\/strong><\/h3>\r\n                            <\/div>\r\n                            \r\n                            <div style=\"display: grid; gap: 20px;\">\r\n                                ${Object.entries(purchasesByUser).map(([userId, userPurchases]) => {\r\n                                    const user = users.find(u => u.$id === userId || u.id === userId);\r\n                                    const userName = user?.name || userPurchases[0]?.userName || 'Cliente';\r\n                                    const userEmail = user?.email || userPurchases[0]?.userEmail || '';\r\n                                    \r\n                                    return `\r\n                                        <div style=\"background: white; border-radius: 12px; padding: 20px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); border-left: 4px solid #3b82f6;\">\r\n                                            <div style=\"display: flex; justify-content: space-between; align-items: start; margin-bottom: 15px;\">\r\n                                                <div>\r\n                                                    <h3 style=\"margin: 0 0 5px 0; color: #1e40af;\">\ud83d\udc64 ${userName}<\/h3>\r\n                                                    ${userEmail ? `<p style=\"margin: 0; color: #6b7280; font-size: 14px;\">\ud83d\udce7 ${userEmail}<\/p>` : ''}\r\n                                                <\/div>\r\n                                                <span style=\"background: #dbeafe; color: #1e40af; padding: 6px 12px; border-radius: 20px; font-size: 13px; font-weight: 600;\">\r\n                                                    ${userPurchases.length} compra(s)\r\n                                                <\/span>\r\n                                            <\/div>\r\n                                            \r\n                                            <div style=\"display: grid; gap: 10px;\">\r\n                                                ${userPurchases.map(purchase => {\r\n                                                    const product = products.find(p => p.$id === purchase.productAppwriteId || p.id === purchase.productId);\r\n                                                    const productImage = product?.image || getPlaceholderDataURI('Produto', 400, 300);\r\n                                                    const currentStock = product?.stock || 0;\r\n                                                    \r\n                                                    return `\r\n                                                        <div style=\"display: grid; grid-template-columns: 100px 1fr auto; gap: 15px; padding: 15px; background: #f9fafb; border-radius: 8px; align-items: center;\">\r\n                                                            <img decoding=\"async\" src=\"${productImage}\" alt=\"${purchase.productName}\" \r\n                                                                style=\"width: 100px; height: 100px; object-fit: cover; border-radius: 8px; border: 2px solid #e5e7eb;\"\r\n                                                                onerror=\"this.src='${getPlaceholderDataURI('Produto', 400, 300)}'\">\r\n                                                            \r\n                                                            <div>\r\n                                                                <h4 style=\"margin: 0 0 8px 0; color: #111827;\">${purchase.productName}<\/h4>\r\n                                                                <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; font-size: 13px;\">\r\n                                                                    <div>\r\n                                                                        <span style=\"color: #6b7280;\">Quantidade:<\/span>\r\n                                                                        <strong style=\"color: #111827;\"> ${purchase.quantity} un.<\/strong>\r\n                                                                    <\/div>\r\n                                                                    <div>\r\n                                                                        <span style=\"color: #6b7280;\">Estoque Atual:<\/span>\r\n                                                                        <strong style=\"color: ${currentStock > 10 ? '#059669' : currentStock > 0 ? '#ea580c' : '#dc2626'};\"> ${currentStock} un.<\/strong>\r\n                                                                    <\/div>\r\n                                                                    <div>\r\n                                                                        <span style=\"color: #6b7280;\">Valor:<\/span>\r\n                                                                        <strong style=\"color: #059669;\"> R$ ${formatCurrency(purchase.total)}<\/strong>\r\n                                                                    <\/div>\r\n                                                                    <div>\r\n                                                                        <span style=\"color: #6b7280;\">Data:<\/span>\r\n                                                                        <strong> ${formatDate(purchase.createdAt)}<\/strong>\r\n                                                                    <\/div>\r\n                                                                <\/div>\r\n                                                            <\/div>\r\n                                                            \r\n                                                            <div style=\"display: flex; gap: 8px;\">\r\n                                                                <button class=\"btn btn-warning btn-small\" \r\n                                                                        onclick=\"processReturn(${purchase.id}, '${purchase.productAppwriteId || purchase.productId}', ${purchase.quantity}, '${userName}')\"\r\n                                                                        style=\"white-space: nowrap; padding: 8px 16px;\">\r\n                                                                    \u21a9\ufe0f Processar Retorno\r\n                                                                <\/button>\r\n                                                                <button class=\"btn btn-danger btn-small\" \r\n                                                                        onclick=\"deleteReturnOrder(${purchase.id})\"\r\n                                                                        style=\"white-space: nowrap; padding: 8px 16px;\">\r\n                                                                    \ud83d\uddd1\ufe0f Excluir\r\n                                                                <\/button>\r\n                                                            <\/div>\r\n                                                        <\/div>\r\n                                                    `;\r\n                                                }).join('')}\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    `;\r\n                                }).join('')}\r\n                            <\/div>\r\n                        `;\r\n                        \r\n                        console.log('\u2705 Lista de retornos carregada');\r\n                    }\r\n\r\n                    async function processReturn(purchaseId, productId, quantity, userName) {\r\n                        if (!confirm(`\u26a0\ufe0f Confirmar retorno de mercadoria?\\n\\nCliente: ${userName}\\nQuantidade: ${quantity} unidades\\n\\nEsta a\u00e7\u00e3o ir\u00e1:\\n\u2022 Adicionar ${quantity} unidades ao estoque do produto\\n\u2022 A compra permanecer\u00e1 como \"Aprovada\" no hist\u00f3rico`)) {\r\n                            return;\r\n                        }\r\n                        \r\n                        try {\r\n                            console.log('\u21a9\ufe0f Processando retorno:', { purchaseId, productId, quantity });\r\n                            \r\n                            \/\/ Buscar o produto atual\r\n                            const products = await databases.listDocuments(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products\r\n                            );\r\n                            const productDoc = products.documents.find(p => p.$id === productId || p.id === productId);\r\n                            \r\n                            if (!productDoc) {\r\n                                alert('\u274c Produto n\u00e3o encontrado!');\r\n                                return;\r\n                            }\r\n                            \r\n                            const currentStock = productDoc.stock || 0;\r\n                            const newStock = currentStock + quantity;\r\n                            \r\n                            console.log('\ud83d\udce6 Estoque atual:', currentStock);\r\n                            console.log('\u2795 Adicionando:', quantity);\r\n                            console.log('\ud83d\udce6 Novo estoque:', newStock);\r\n                            \r\n                            \/\/ Atualizar estoque no Appwrite\r\n                            await databases.updateDocument(\r\n                                appwriteConfig.databaseId,\r\n                                appwriteConfig.collections.products,\r\n                                productDoc.$id,\r\n                                { stock: newStock }\r\n                            );\r\n                            \r\n                            console.log('\u2705 Estoque atualizado no Appwrite');\r\n                            \r\n                            \/\/ Atualizar localStorage\r\n                            const localProducts = JSON.parse(localStorage.getItem('products') || '[]');\r\n                            const localProduct = localProducts.find(p => (p.$id === productId || p.id === productId));\r\n                            if (localProduct) {\r\n                                localProduct.stock = newStock;\r\n                                localStorage.setItem('products', JSON.stringify(localProducts));\r\n                            }\r\n                            \r\n                            alert(`\u2705 Retorno processado com sucesso!\\n\\nProduto: ${productDoc.name}\\nQuantidade devolvida: ${quantity} unidades\\nEstoque anterior: ${currentStock}\\nNovo estoque: ${newStock}`);\r\n                            \r\n                            \/\/ Recarregar a lista\r\n                            await loadReturnOrders();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao processar retorno:', error);\r\n                            alert('\u274c Erro ao processar retorno: ' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    async function deleteReturnOrder(purchaseId) {\r\n                        if (!confirm('\u26a0\ufe0f Tem certeza que deseja excluir este pedido?\\n\\nEsta a\u00e7\u00e3o n\u00e3o pode ser desfeita.')) {\r\n                            return;\r\n                        }\r\n                        \r\n                        try {\r\n                            console.log('\ud83d\uddd1\ufe0f Excluindo pedido:', purchaseId);\r\n                            \r\n                            \/\/ Buscar a compra\r\n                            const purchases = await getPurchases();\r\n                            const purchase = purchases.find(p => p.id === purchaseId);\r\n                            \r\n                            if (!purchase) {\r\n                                alert('\u274c Pedido n\u00e3o encontrado!');\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Tentar deletar do Appwrite se tiver $id\r\n                            if (purchase.$id) {\r\n                                try {\r\n                                    await databases.deleteDocument(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.purchases,\r\n                                        purchase.$id\r\n                                    );\r\n                                    console.log('\u2705 Pedido deletado do Appwrite');\r\n                                } catch (error) {\r\n                                    console.log('\u26a0\ufe0f N\u00e3o foi poss\u00edvel deletar do Appwrite:', error.message);\r\n                                }\r\n                            }\r\n                            \r\n                            \/\/ Remover do localStorage\r\n                            const updatedPurchases = purchases.filter(p => p.id !== purchaseId);\r\n                            localStorage.setItem('purchases', JSON.stringify(updatedPurchases));\r\n                            console.log('\u2705 Pedido removido do localStorage');\r\n                            \r\n                            alert('\u2705 Pedido exclu\u00eddo com sucesso!');\r\n                            \r\n                            \/\/ Recarregar a lista\r\n                            await loadReturnOrders();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao excluir pedido:', error);\r\n                            alert('\u274c Erro ao excluir pedido: ' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    async function clearShippedOrders() {\r\n                        if (!confirm('\u26a0\ufe0f ATEN\u00c7\u00c3O: Tem certeza que deseja excluir TODOS os pedidos enviados?\\n\\nEsta a\u00e7\u00e3o ir\u00e1:\\n\u2022 Remover todos os registros de vendas com status \"Enviado\"\\n\u2022 Esta a\u00e7\u00e3o n\u00e3o pode ser desfeita!\\n\\nDeseja continuar?')) {\r\n                            return;\r\n                        }\r\n                        \r\n                        try {\r\n                            console.log('\ud83d\uddd1\ufe0f Limpando pedidos enviados...');\r\n                            \r\n                            \/\/ Buscar todas as vendas\r\n                            const sales = await getSales();\r\n                            const shippedSales = sales.filter(s => s.status === 'Enviado');\r\n                            \r\n                            console.log(`\ud83d\udce6 Total de pedidos enviados a excluir: ${shippedSales.length}`);\r\n                            \r\n                            \/\/ Tentar deletar do Appwrite\r\n                            for (const sale of shippedSales) {\r\n                                if (sale.$id) {\r\n                                    try {\r\n                                        await databases.deleteDocument(\r\n                                            appwriteConfig.databaseId,\r\n                                            appwriteConfig.collections.sales,\r\n                                            sale.$id\r\n                                        );\r\n                                        console.log('\u2705 Venda deletada do Appwrite:', sale.$id);\r\n                                    } catch (error) {\r\n                                        console.log('\u26a0\ufe0f Erro ao deletar do Appwrite:', error.message);\r\n                                    }\r\n                                }\r\n                            }\r\n                            \r\n                            \/\/ Remover do localStorage (manter apenas vendas que n\u00e3o s\u00e3o \"Enviado\")\r\n                            const remainingSales = sales.filter(s => s.status !== 'Enviado');\r\n                            localStorage.setItem('sales', JSON.stringify(remainingSales));\r\n                            \r\n                            console.log('\u2705 Pedidos enviados limpos do localStorage');\r\n                            \r\n                            alert(`\u2705 ${shippedSales.length} pedido(s) enviado(s) foram exclu\u00eddos com sucesso!`);\r\n                            \r\n                            \/\/ Recarregar a lista\r\n                            await loadShippedOrders();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao limpar pedidos enviados:', error);\r\n                            alert('\u274c Erro ao limpar pedidos: ' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    async function clearAllPurchases() {\r\n                        if (!confirm('\u26a0\ufe0f ATEN\u00c7\u00c3O CR\u00cdTICA: Tem certeza que deseja excluir TODAS as compras?\\n\\nEsta a\u00e7\u00e3o ir\u00e1:\\n\u2022 Remover TODOS os registros de compras (aprovadas, pendentes e rejeitadas)\\n\u2022 Esta a\u00e7\u00e3o n\u00e3o pode ser desfeita!\\n\u2022 Os dados ser\u00e3o perdidos permanentemente!\\n\\nDeseja continuar?')) {\r\n                            return;\r\n                        }\r\n                        \r\n                        if (!confirm('\u26a0\ufe0f \u00daLTIMA CONFIRMA\u00c7\u00c3O: Esta \u00e9 uma a\u00e7\u00e3o irrevers\u00edvel!\\n\\nTODAS as compras ser\u00e3o deletadas permanentemente.\\n\\nTem ABSOLUTA certeza?')) {\r\n                            return;\r\n                        }\r\n                        \r\n                        try {\r\n                            console.log('\ud83d\uddd1\ufe0f Limpando todas as compras...');\r\n                            \r\n                            \/\/ Buscar todas as compras\r\n                            const purchases = await getPurchases();\r\n                            \r\n                            console.log(`\ud83d\udce6 Total de compras a excluir: ${purchases.length}`);\r\n                            \r\n                            \/\/ Tentar deletar do Appwrite\r\n                            for (const purchase of purchases) {\r\n                                if (purchase.$id) {\r\n                                    try {\r\n                                        await databases.deleteDocument(\r\n                                            appwriteConfig.databaseId,\r\n                                            appwriteConfig.collections.purchases,\r\n                                            purchase.$id\r\n                                        );\r\n                                        console.log('\u2705 Compra deletada do Appwrite:', purchase.$id);\r\n                                    } catch (error) {\r\n                                        console.log('\u26a0\ufe0f Erro ao deletar do Appwrite:', error.message);\r\n                                    }\r\n                                }\r\n                            }\r\n                            \r\n                            \/\/ Limpar localStorage\r\n                            localStorage.setItem('purchases', JSON.stringify([]));\r\n                            \r\n                            console.log('\u2705 Todas as compras limpas');\r\n                            \r\n                            alert(`\u2705 ${purchases.length} compra(s) foram exclu\u00eddas com sucesso!`);\r\n                            \r\n                            \/\/ Recarregar a lista\r\n                            await loadAllPurchases();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao limpar compras:', error);\r\n                            alert('\u274c Erro ao limpar compras: ' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para carregar solicita\u00e7\u00f5es de retorno pendentes\r\n                    async function loadReturnRequests() {\r\n                        console.log('\ud83d\udd04 Carregando solicita\u00e7\u00f5es de retorno...');\r\n                        console.log('\ud83d\udccb Collection ID configurado:', appwriteConfig.collections.returns);\r\n                        \r\n                        const returns = await getReturns();\r\n                        console.log('\ud83d\udce6 Total de retornos no sistema:', returns);\r\n                        console.log('\ud83d\udce6 Quantidade:', returns.length);\r\n                        \r\n                        if (returns.length > 0) {\r\n                            console.log('\ud83d\udccb Primeiro retorno:', returns[0]);\r\n                            console.log('\ud83d\udccb Status dos retornos:', returns.map(r => ({ id: r.id, status: r.status })));\r\n                        }\r\n                        \r\n                        const pendingReturns = returns.filter(r => r.status === 'Pendente');\r\n                        console.log('\u23f3 Retornos pendentes:', pendingReturns);\r\n                        console.log('\u23f3 Quantidade pendente:', pendingReturns.length);\r\n                        \r\n                        const list = document.getElementById('returnRequestsList');\r\n                        \r\n                        if (!list) {\r\n                            console.error('\u274c Elemento returnRequestsList n\u00e3o encontrado!');\r\n                            return;\r\n                        }\r\n                        \r\n                        console.log('\u2705 Elemento returnRequestsList encontrado');\r\n                        \r\n                        if (pendingReturns.length === 0) {\r\n                            console.log('\u26a0\ufe0f Nenhuma solicita\u00e7\u00e3o pendente, exibindo mensagem');\r\n                            list.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Nenhuma solicita\u00e7\u00e3o de retorno pendente<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Buscar produtos para obter informa\u00e7\u00f5es completas\r\n                        const products = await getProducts();\r\n                        \r\n                        list.innerHTML = `\r\n                            <div style=\"background: #fef3c7; padding: 15px; border-radius: 8px; margin-bottom: 20px; text-align: center; border: 2px solid #f59e0b;\">\r\n                                <h3 style=\"margin: 0; color: #92400e;\">\u26a0\ufe0f Solicita\u00e7\u00f5es Pendentes: <strong>${pendingReturns.length}<\/strong><\/h3>\r\n                            <\/div>\r\n                            \r\n                            <div style=\"display: grid; gap: 20px;\">\r\n                                ${pendingReturns.map(returnRequest => {\r\n                                    const product = products.find(p => p.$id === returnRequest.productId || p.id === returnRequest.productId);\r\n                                    const productImage = product?.image || getPlaceholderDataURI('Produto', 400, 300);\r\n                                    const requestDate = new Date(returnRequest.requestedAt);\r\n                                    \r\n                                    return `\r\n                                        <div style=\"background: white; border-radius: 12px; padding: 20px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); border-left: 4px solid #f59e0b;\">\r\n                                            <div style=\"display: flex; justify-content: space-between; align-items: start; margin-bottom: 15px;\">\r\n                                                <div>\r\n                                                    <h3 style=\"margin: 0 0 5px 0; color: #92400e;\">\ud83d\udc64 ${returnRequest.userName}<\/h3>\r\n                                                    <p style=\"margin: 0; color: #6b7280; font-size: 13px;\">\ud83d\udcc5 Solicitado em: ${formatDate(returnRequest.requestedAt)} \u00e0s ${requestDate.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' })}<\/p>\r\n                                                <\/div>\r\n                                                <span style=\"background: #fef3c7; color: #92400e; padding: 6px 12px; border-radius: 20px; font-size: 13px; font-weight: 600; border: 1px solid #f59e0b;\">\r\n                                                    \u23f3 ${returnRequest.status}\r\n                                                <\/span>\r\n                                            <\/div>\r\n                                            \r\n                                            <div style=\"display: grid; grid-template-columns: 120px 1fr; gap: 20px; padding: 15px; background: #f9fafb; border-radius: 8px;\">\r\n                                                <img decoding=\"async\" src=\"${productImage}\" alt=\"${returnRequest.productName}\" \r\n                                                    style=\"width: 120px; height: 120px; object-fit: cover; border-radius: 8px; border: 2px solid #e5e7eb;\"\r\n                                                    onerror=\"this.src='${getPlaceholderDataURI('Produto', 400, 300)}'\">\r\n                                                \r\n                                                <div>\r\n                                                    <h4 style=\"margin: 0 0 12px 0; color: #111827; font-size: 18px;\">${returnRequest.productName}<\/h4>\r\n                                                    <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; font-size: 14px;\">\r\n                                                        <div>\r\n                                                            <span style=\"color: #6b7280;\">Quantidade a Devolver:<\/span>\r\n                                                            <strong style=\"color: #f59e0b; font-size: 16px;\"> ${returnRequest.quantity} un.<\/strong>\r\n                                                        <\/div>\r\n                                                        <div>\r\n                                                            <span style=\"color: #6b7280;\">Estoque Atual do Cliente:<\/span>\r\n                                                            <strong style=\"color: #3b82f6;\"> ${returnRequest.currentUserStock} un.<\/strong>\r\n                                                        <\/div>\r\n                                                        <div>\r\n                                                            <span style=\"color: #6b7280;\">Estoque Ap\u00f3s Retorno:<\/span>\r\n                                                            <strong style=\"color: #059669;\"> ${returnRequest.currentUserStock + returnRequest.quantity} un.<\/strong>\r\n                                                        <\/div>\r\n                                                    <\/div>\r\n                                                    \r\n                                                    <div style=\"display: flex; gap: 10px; margin-top: 15px;\">\r\n                                                        <button class=\"btn btn-success btn-small\" \r\n                                                                onclick=\"approveReturn(${returnRequest.id})\"\r\n                                                                style=\"flex: 1; padding: 10px;\">\r\n                                                            \u2705 Aprovar Retorno\r\n                                                        <\/button>\r\n                                                        <button class=\"btn btn-danger btn-small\" \r\n                                                                onclick=\"rejectReturn(${returnRequest.id})\"\r\n                                                                style=\"flex: 1; padding: 10px;\">\r\n                                                            \u274c Rejeitar\r\n                                                        <\/button>\r\n                                                    <\/div>\r\n                                                <\/div>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    `;\r\n                                }).join('')}\r\n                            <\/div>\r\n                        `;\r\n                        \r\n                        console.log('\u2705 Solicita\u00e7\u00f5es de retorno carregadas');\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para aprovar retorno\r\n                    async function approveReturn(returnId) {\r\n                        try {\r\n                            console.log('\u2705 Aprovando retorno:', returnId);\r\n                            \r\n                            \/\/ Buscar a solicita\u00e7\u00e3o\r\n                            const returns = await getReturns();\r\n                            const returnRequest = returns.find(r => r.id === returnId);\r\n                            \r\n                            if (!returnRequest) {\r\n                                alert('\u274c Solicita\u00e7\u00e3o de retorno n\u00e3o encontrada!');\r\n                                return;\r\n                            }\r\n                            \r\n                            if (!confirm(`\u2705 Confirmar aprova\u00e7\u00e3o do retorno?\\n\\n` +\r\n                                    `Cliente: ${returnRequest.userName}\\n` +\r\n                                    `Produto: ${returnRequest.productName}\\n` +\r\n                                    `Quantidade: ${returnRequest.quantity} unidades\\n\\n` +\r\n                                    `Ao aprovar:\\n` +\r\n                                    `\u2022 ${returnRequest.quantity} unidades ser\u00e3o devolvidas ao estoque do cliente\\n` +\r\n                                    `\u2022 Os registros de venda ser\u00e3o removidos\\n` +\r\n                                    `\u2022 O cliente poder\u00e1 enviar novamente para outro cliente`)) {\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Buscar o estoque do cliente\r\n                            const allStock = await getStock();\r\n                            const userStock = allStock.find(s => \r\n                                (s.productAppwriteId === returnRequest.productId || s.productId === returnRequest.productId) && \r\n                                s.userAppwriteId === returnRequest.userId\r\n                            );\r\n                            \r\n                            const newUserStock = returnRequest.currentUserStock + returnRequest.quantity;\r\n                            \r\n                            \/\/ Atualizar ou criar estoque do cliente\r\n                            if (userStock) {\r\n                                \/\/ Atualizar estoque existente\r\n                                try {\r\n                                    const appwriteStock = await databases.listDocuments(\r\n                                        appwriteConfig.databaseId,\r\n                                        appwriteConfig.collections.stock\r\n                                    );\r\n                                    const stockDoc = appwriteStock.documents.find(s => s.id === userStock.id);\r\n                                    \r\n                                    if (stockDoc && stockDoc.$id) {\r\n                                        await databases.updateDocument(\r\n                                            appwriteConfig.databaseId,\r\n                                            appwriteConfig.collections.stock,\r\n                                            stockDoc.$id,\r\n                                            { quantity: newUserStock }\r\n                                        );\r\n                                    }\r\n                                } catch (updateError) {\r\n                                    console.error('\u26a0\ufe0f Erro ao atualizar Appwrite:', updateError);\r\n                                }\r\n                                \r\n                                userStock.quantity = newUserStock;\r\n                                await setStock(allStock);\r\n                            } else {\r\n                                \/\/ Criar novo registro de estoque\r\n                                const newStockItem = {\r\n                                    id: Date.now(),\r\n                                    userId: returnRequest.userId,\r\n                                    userAppwriteId: returnRequest.userId,\r\n                                    userName: returnRequest.userName,\r\n                                    productId: returnRequest.productId,\r\n                                    productAppwriteId: returnRequest.productId,\r\n                                    productName: returnRequest.productName,\r\n                                    quantity: returnRequest.quantity,\r\n                                    createdAt: new Date().toISOString()\r\n                                };\r\n                                \r\n                                try {\r\n                                    await createDocument(appwriteConfig.collections.stock, newStockItem);\r\n                                } catch (createError) {\r\n                                    console.error('\u26a0\ufe0f Erro ao criar no Appwrite:', createError);\r\n                                }\r\n                                \r\n                                allStock.push(newStockItem);\r\n                                await setStock(allStock);\r\n                            }\r\n                            \r\n                            \/\/ Remover os registros de venda relacionados\r\n                            const sales = await getSales();\r\n                            for (const saleId of returnRequest.salesIds) {\r\n                                const sale = sales.find(s => s.id === saleId);\r\n                                if (sale) {\r\n                                    try {\r\n                                        const appwriteSales = await databases.listDocuments(\r\n                                            appwriteConfig.databaseId,\r\n                                            appwriteConfig.collections.sales\r\n                                        );\r\n                                        const saleDoc = appwriteSales.documents.find(s => s.id === saleId);\r\n                                        \r\n                                        if (saleDoc && saleDoc.$id) {\r\n                                            await databases.deleteDocument(\r\n                                                appwriteConfig.databaseId,\r\n                                                appwriteConfig.collections.sales,\r\n                                                saleDoc.$id\r\n                                            );\r\n                                        }\r\n                                    } catch (deleteError) {\r\n                                        console.error('\u26a0\ufe0f Erro ao deletar venda do Appwrite:', deleteError);\r\n                                    }\r\n                                }\r\n                            }\r\n                            \r\n                            \/\/ Atualizar localStorage de vendas\r\n                            const localSales = JSON.parse(localStorage.getItem('sales') || '[]');\r\n                            const filteredSales = localSales.filter(s => !returnRequest.salesIds.includes(s.id));\r\n                            localStorage.setItem('sales', JSON.stringify(filteredSales));\r\n                            \r\n                            \/\/ Atualizar status da solicita\u00e7\u00e3o\r\n                            returnRequest.status = 'Aprovada';\r\n                            returnRequest.processedAt = new Date().toISOString();\r\n                            \r\n                            \/\/ Atualizar no Appwrite\r\n                            if (appwriteConfig.collections.returns && appwriteConfig.collections.returns !== 'returns_local') {\r\n                                try {\r\n                                    if (returnRequest.$id) {\r\n                                        await databases.updateDocument(\r\n                                            appwriteConfig.databaseId,\r\n                                            appwriteConfig.collections.returns,\r\n                                            returnRequest.$id,\r\n                                            { \r\n                                                status: 'Aprovada',\r\n                                                processedAt: returnRequest.processedAt\r\n                                            }\r\n                                        );\r\n                                        console.log('\u2705 Status atualizado no Appwrite');\r\n                                    }\r\n                                } catch (updateError) {\r\n                                    console.error('\u26a0\ufe0f Erro ao atualizar status no Appwrite:', updateError);\r\n                                }\r\n                            }\r\n                            \r\n                            await setReturns(returns);\r\n                            \r\n                            alert(`\u2705 Retorno aprovado com sucesso!\\n\\n` +\r\n                                `Cliente: ${returnRequest.userName}\\n` +\r\n                                `Produto: ${returnRequest.productName}\\n` +\r\n                                `Quantidade devolvida: ${returnRequest.quantity} unidades\\n\\n` +\r\n                                `Novo estoque do cliente: ${newUserStock} unidades`);\r\n                            \r\n                            \/\/ Recarregar a lista\r\n                            await loadReturnRequests();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao aprovar retorno:', error);\r\n                            alert('\u274c Erro ao aprovar retorno: ' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00e3o para rejeitar retorno\r\n                    async function rejectReturn(returnId) {\r\n                        const reason = prompt('\u274c Motivo da rejei\u00e7\u00e3o:\\n\\n(Este motivo ser\u00e1 informado ao cliente)');\r\n                        \r\n                        if (!reason || reason.trim() === '') {\r\n                            return;\r\n                        }\r\n                        \r\n                        try {\r\n                            console.log('\u274c Rejeitando retorno:', returnId);\r\n                            \r\n                            const returns = await getReturns();\r\n                            const returnRequest = returns.find(r => r.id === returnId);\r\n                            \r\n                            if (!returnRequest) {\r\n                                alert('\u274c Solicita\u00e7\u00e3o de retorno n\u00e3o encontrada!');\r\n                                return;\r\n                            }\r\n                            \r\n                            \/\/ Atualizar status\r\n                            returnRequest.status = 'Rejeitada';\r\n                            returnRequest.rejectionReason = reason.trim();\r\n                            returnRequest.processedAt = new Date().toISOString();\r\n                            \r\n                            \/\/ Atualizar no Appwrite\r\n                            if (appwriteConfig.collections.returns && appwriteConfig.collections.returns !== 'returns_local') {\r\n                                try {\r\n                                    if (returnRequest.$id) {\r\n                                        await databases.updateDocument(\r\n                                            appwriteConfig.databaseId,\r\n                                            appwriteConfig.collections.returns,\r\n                                            returnRequest.$id,\r\n                                            { \r\n                                                status: 'Rejeitada',\r\n                                                rejectionReason: returnRequest.rejectionReason,\r\n                                                processedAt: returnRequest.processedAt\r\n                                            }\r\n                                        );\r\n                                        console.log('\u2705 Status atualizado no Appwrite');\r\n                                    }\r\n                                } catch (updateError) {\r\n                                    console.error('\u26a0\ufe0f Erro ao atualizar status no Appwrite:', updateError);\r\n                                }\r\n                            }\r\n                            \r\n                            await setReturns(returns);\r\n                            \r\n                            alert(`\u2705 Retorno rejeitado!\\n\\n` +\r\n                                `Cliente: ${returnRequest.userName}\\n` +\r\n                                `Produto: ${returnRequest.productName}\\n` +\r\n                                `Motivo: ${reason.trim()}`);\r\n                            \r\n                            \/\/ Recarregar a lista\r\n                            await loadReturnRequests();\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao rejeitar retorno:', error);\r\n                            alert('\u274c Erro ao rejeitar retorno: ' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    async function loadAllPurchases() {\r\n                        const purchases = await getPurchases();\r\n                        const list = document.getElementById('allPurchasesList');\r\n                        \r\n                        if (!list) return;\r\n                        \r\n                        if (purchases.length === 0) {\r\n                            list.innerHTML = '<p style=\"text-align:center;color:#6b7280;\">Nenhuma compra registrada<\/p>';\r\n                            return;\r\n                        }\r\n                        \r\n                        \/\/ Buscar produtos para obter imagens\r\n                        const products = await getProducts();\r\n                        \r\n                        \/\/ Estat\u00edsticas\r\n                        const totalCompras = purchases.length;\r\n                        const aprovadas = purchases.filter(p => p.status === 'Aprovada').length;\r\n                        const pendentes = purchases.filter(p => p.status === 'Pendente').length;\r\n                        const rejeitadas = purchases.filter(p => p.status === 'Rejeitada').length;\r\n                        \r\n                        list.innerHTML = `\r\n                            <div style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 20px; border-radius: 12px; margin-bottom: 25px; color: white; text-align: center;\">\r\n                                <h3 style=\"margin: 0 0 15px 0;\">\ud83d\udcca Resumo de Todas as Compras<\/h3>\r\n                                <div style=\"display: flex; justify-content: space-around; flex-wrap: wrap; gap: 15px;\">\r\n                                    <div style=\"flex: 1; min-width: 150px; background: rgba(255,255,255,0.2); padding: 15px; border-radius: 8px;\">\r\n                                        <div style=\"font-size: 32px; font-weight: bold;\">${totalCompras}<\/div>\r\n                                        <div style=\"font-size: 14px; opacity: 0.9;\">Total<\/div>\r\n                                    <\/div>\r\n                                    <div style=\"flex: 1; min-width: 150px; background: rgba(34,197,94,0.3); padding: 15px; border-radius: 8px;\">\r\n                                        <div style=\"font-size: 32px; font-weight: bold;\">${aprovadas}<\/div>\r\n                                        <div style=\"font-size: 14px; opacity: 0.9;\">Aprovadas<\/div>\r\n                                    <\/div>\r\n                                    <div style=\"flex: 1; min-width: 150px; background: rgba(250,204,21,0.3); padding: 15px; border-radius: 8px;\">\r\n                                        <div style=\"font-size: 32px; font-weight: bold;\">${pendentes}<\/div>\r\n                                        <div style=\"font-size: 14px; opacity: 0.9;\">Pendentes<\/div>\r\n                                    <\/div>\r\n                                    <div style=\"flex: 1; min-width: 150px; background: rgba(239,68,68,0.3); padding: 15px; border-radius: 8px;\">\r\n                                        <div style=\"font-size: 32px; font-weight: bold;\">${rejeitadas}<\/div>\r\n                                        <div style=\"font-size: 14px; opacity: 0.9;\">Rejeitadas<\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 20px;\">\r\n                                ${purchases.map(purchase => {\r\n                                    const badgeClass = purchase.status === 'Aprovada' ? 'success' : \r\n                                                    purchase.status === 'Rejeitada' ? 'danger' : 'warning';\r\n                                    const product = products.find(p => (p.$id === purchase.productAppwriteId || p.id === purchase.productId));\r\n                                    const approvalDate = purchase.approvedAt ? new Date(purchase.approvedAt) : null;\r\n                                    const createdDate = new Date(purchase.createdAt);\r\n                                    \r\n                                    return `\r\n                                        <div class=\"purchase-card\" style=\"border: 2px solid ${purchase.status === 'Aprovada' ? '#86efac' : purchase.status === 'Rejeitada' ? '#fca5a5' : '#fcd34d'}; overflow: hidden; padding: 0;\">\r\n                                            ${product?.image ? `\r\n                                                <img decoding=\"async\" src=\"${product.image}\" alt=\"${purchase.productName}\" \r\n                                                    style=\"width: 100%; height: 180px; object-fit: cover;\"\r\n                                                    onerror=\"this.src='${getPlaceholderDataURI(purchase.productName, 400, 180)}'\">\r\n                                            ` : `\r\n                                                <img decoding=\"async\" src=\"${getPlaceholderDataURI(purchase.productName, 400, 180)}\" alt=\"${purchase.productName}\" \r\n                                                    style=\"width: 100%; height: 180px; object-fit: cover;\">\r\n                                            `}\r\n                                            <div style=\"padding: 15px;\">\r\n                                                <h4 style=\"margin: 0 0 12px 0; color: #1f2937; font-size: 18px;\">\ud83d\uded2 ${purchase.productName}<\/h4>\r\n                                                \r\n                                                <div style=\"background: #f9fafb; padding: 10px; border-radius: 6px; margin-bottom: 10px;\">\r\n                                                    <p style=\"margin: 3px 0; font-size: 13px;\"><strong>\ud83d\udc64 Cliente:<\/strong> ${purchase.userName}<\/p>\r\n                                                    <p style=\"margin: 3px 0; font-size: 13px;\"><strong>\ud83d\udce7 Email:<\/strong> ${purchase.userEmail || 'N\u00e3o informado'}<\/p>\r\n                                                <\/div>\r\n                                                \r\n                                                <p style=\"margin: 8px 0; font-size: 14px;\"><strong>\ud83d\udce6 Quantidade:<\/strong> ${purchase.quantity} unidades<\/p>\r\n                                                <p style=\"margin: 8px 0; font-size: 16px;\"><strong>\ud83d\udcb0 Valor Total:<\/strong> <span style=\"color: #059669; font-weight: bold;\">R$ ${formatCurrency(purchase.total)}<\/span><\/p>\r\n                                                \r\n                                                <p style=\"margin: 10px 0;\">\r\n                                                    <strong>Status:<\/strong> \r\n                                                    <span class=\"badge badge-${badgeClass}\" style=\"font-size: 13px; padding: 6px 12px;\">${purchase.status}<\/span>\r\n                                                <\/p>\r\n                                                \r\n                                                <div style=\"border-top: 1px solid #e5e7eb; padding-top: 10px; margin-top: 10px; font-size: 12px; color: #6b7280;\">\r\n                                                    <p style=\"margin: 3px 0;\"><strong>\ud83d\udcc5 Data da Compra:<\/strong> ${createdDate.toLocaleDateString('pt-BR')} \u00e0s ${createdDate.toLocaleTimeString('pt-BR')}<\/p>\r\n                                                    ${approvalDate ? `\r\n                                                        <p style=\"margin: 3px 0; color: #059669;\"><strong>\u2705 Data da Aprova\u00e7\u00e3o:<\/strong> ${approvalDate.toLocaleDateString('pt-BR')} \u00e0s ${approvalDate.toLocaleTimeString('pt-BR')}<\/p>\r\n                                                    ` : ''}\r\n                                                <\/div>\r\n                                                \r\n                                                <button class=\"btn btn-primary\" onclick=\"viewReceipt(${purchase.id})\" style=\"width: 100%; margin-top: 12px; font-size: 13px;\">\r\n                                                    \ud83d\udcc4 Ver Comprovante\r\n                                                <\/button>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    `;\r\n                                }).join('')}\r\n                            <\/div>\r\n                        `;\r\n                    }\r\n\r\n                    \/\/ Modal Functions\r\n                    function closeModal(modalId) {\r\n                        document.getElementById(modalId).classList.remove('active');\r\n                    }\r\n\r\n                    function switchTab(tabName, event) {\r\n                        document.querySelectorAll('#userDashboard .tab').forEach(t => t.classList.remove('active'));\r\n                        document.querySelectorAll('#userDashboard .tab-content').forEach(c => c.classList.remove('active'));\r\n                        \r\n                        event.target.classList.add('active');\r\n                        document.getElementById(tabName + 'Tab').classList.add('active');\r\n                        \r\n                        if (tabName === 'catalogo') loadProducts();\r\n                        if (tabName === 'compras') loadPurchases();\r\n                        if (tabName === 'estoque') loadStock();\r\n                        if (tabName === 'vendidos') loadSales();\r\n                        if (tabName === 'meus-retornos') loadMyReturns();\r\n                        if (tabName === 'perfil') loadUserProfile();\r\n                    }\r\n\r\n                    function switchAdminTab(tabName, event) {\r\n                        document.querySelectorAll('#adminDashboard .tab').forEach(t => t.classList.remove('active'));\r\n                        document.querySelectorAll('#adminDashboard .tab-content').forEach(c => c.classList.remove('active'));\r\n                        \r\n                        event.target.classList.add('active');\r\n                        document.getElementById(tabName + 'Tab').classList.add('active');\r\n                        \r\n                        if (tabName === 'envios') loadPendingShipments();\r\n                        if (tabName === 'aprovacoes') loadPendingApprovals();\r\n                        if (tabName === 'solicitacoes-retorno') loadReturnRequests();\r\n                        if (tabName === 'retornos') loadReturnOrders();\r\n                        if (tabName === 'catalogo') loadCatalogProducts();\r\n                        if (tabName === 'usuarios') loadAllUsers();\r\n                        if (tabName === 'produtos') loadAdminProducts();\r\n                        if (tabName === 'enviados') loadShippedOrders();\r\n                        if (tabName === 'todas') loadAllPurchases();\r\n                    }\r\n\r\n                    \/\/ Quantity change handler\r\n                    document.getElementById('reservaQuantity')?.addEventListener('input', function() {\r\n                        const price = parseFloat(document.getElementById('reservaProductPrice').value.replace('R$ ', '').replace(',', '.'));\r\n                        const quantity = parseInt(this.value) || 0;\r\n                        const total = price * quantity;\r\n                        document.getElementById('reservaTotal').value = 'R$ ' + formatCurrency(total);\r\n                    });\r\n\r\n                    \/\/ ===============================\r\n                    \/\/ FUN\u00c7\u00d5ES ADICIONAIS\r\n                    \/\/ ===============================\r\n\r\n                    \/\/ Copiar chave PIX Copia e Cola\r\n                    function copyPixKey() {\r\n                        const pixCopiaCola = '00020101021126580014br.gov.bcb.pix0136d1d04215-cb68-4bff-a787-acb5f2da2cf15204000053039865802BR5916ATEKNOLOGIA SHOP6013RIO DE JANEIR62070503***63047EA5';\r\n                        \r\n                        navigator.clipboard.writeText(pixCopiaCola).then(() => {\r\n                            alert('\u2705 Chave PIX Copia e Cola copiada com sucesso!\\n\\nCole no seu aplicativo de pagamento para realizar a transfer\u00eancia.');\r\n                        }).catch(err => {\r\n                            console.error('Erro ao copiar:', err);\r\n                            \/\/ Fallback: selecionar o texto no textarea\r\n                            const textarea = document.getElementById('pixCopiaCola');\r\n                            if (textarea) {\r\n                                textarea.select();\r\n                                textarea.setSelectionRange(0, 99999); \/\/ Para mobile\r\n                                try {\r\n                                    document.execCommand('copy');\r\n                                    alert('\u2705 Chave PIX Copia e Cola copiada!');\r\n                                } catch (e) {\r\n                                    alert('\u26a0\ufe0f Por favor, copie manualmente a chave PIX acima.');\r\n                                }\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    \/\/ Fun\u00e7\u00f5es de Perfil do Usu\u00e1rio\r\n                    async function loadUserProfile() {\r\n                        try {\r\n                            const session = await account.get();\r\n                            const prefs = await account.getPrefs();\r\n                            \r\n                            console.log('\ud83d\udccb Carregando perfil:', session);\r\n                            console.log('\ud83d\udccb Prefer\u00eancias:', prefs);\r\n                            \r\n                            \/\/ Preencher campos\r\n                            document.getElementById('profileName').value = session.name || '';\r\n                            document.getElementById('profileEmail').value = session.email || '';\r\n                            document.getElementById('profilePhone').value = prefs.phone || '';\r\n                            \r\n                            console.log('\u2705 Perfil carregado com sucesso');\r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao carregar perfil:', error);\r\n                            alert('Erro ao carregar perfil: ' + error.message);\r\n                        }\r\n                    }\r\n\r\n                    \/\/ Salvar perfil\r\n                    document.getElementById('profileForm')?.addEventListener('submit', async function(e) {\r\n                        e.preventDefault();\r\n                        \r\n                        try {\r\n                            const name = document.getElementById('profileName').value.trim();\r\n                            const phone = document.getElementById('profilePhone').value.trim();\r\n                            \r\n                            console.log('\ud83d\udcbe Salvando perfil...');\r\n                            \r\n                            \/\/ Atualizar nome no Appwrite\r\n                            await account.updateName(name);\r\n                            \r\n                            \/\/ Atualizar prefer\u00eancias (telefone)\r\n                            await account.updatePrefs({\r\n                                phone: phone\r\n                            });\r\n                            \r\n                            console.log('\u2705 Perfil salvo com sucesso');\r\n                            alert('\u2705 Perfil atualizado com sucesso!');\r\n                            \r\n                            \/\/ Atualizar nome no header\r\n                            document.getElementById('userName').textContent = name;\r\n                            \r\n                        } catch (error) {\r\n                            console.error('\u274c Erro ao salvar perfil:', error);\r\n                            alert('\u274c Erro ao salvar perfil: ' + error.message);\r\n                        }\r\n                    });\r\n\r\n                    \/\/ Baixar modelo de planilha CSV\r\n                    function downloadTemplate() {\r\n                        const csvContent = 'nome,preco,descricao,imagem\\nProduto Exemplo,99.90,Descri\u00e7\u00e3o do produto,' + encodeURIComponent(getPlaceholderDataURI('Produto',400,300));\r\n                        const blob = new Blob([csvContent], { type: 'text\/csv;charset=utf-8;' });\r\n                        const link = document.createElement('a');\r\n                        const url = URL.createObjectURL(blob);\r\n                        link.setAttribute('href', url);\r\n                        link.setAttribute('download', 'modelo_produtos.csv');\r\n                        link.style.visibility = 'hidden';\r\n                        document.body.appendChild(link);\r\n                        link.click();\r\n                        document.body.removeChild(link);\r\n                        alert('\u2705 Modelo de planilha baixado com sucesso!');\r\n                    }\r\n\r\n                    \/\/ Imprimir etiqueta\r\n                    function printLabel() {\r\n                        window.print();\r\n                    }\r\n\r\n                    \/\/ Verificar alertas de estoque baixo\r\n                    async function checkStockAlerts() {\r\n                        const session = await account.get();\r\n                        const user = { id: session.$id };\r\n                        const stock = (await getStock()).filter(s => s.userId === user.id);\r\n                        const lowStockItems = stock.filter(s => s.quantity <= 10 && s.quantity > 0);\r\n                        const outOfStockItems = stock.filter(s => s.quantity === 0);\r\n                        \r\n                        const stockAlerts = document.getElementById('stockAlerts');\r\n                        if (!stockAlerts) return;\r\n                        \r\n                        if (lowStockItems.length === 0 && outOfStockItems.length === 0) {\r\n                            stockAlerts.innerHTML = '';\r\n                            return;\r\n                        }\r\n                        \r\n                        let alertsHTML = '<div class=\"alerts-container\">';\r\n                        \r\n                        if (outOfStockItems.length > 0) {\r\n                            alertsHTML += `\r\n                                <div class=\"alert alert-danger\">\r\n                                    <strong>\u26a0\ufe0f ESGOTADO:<\/strong> ${outOfStockItems.length} produto(s) sem estoque!\r\n                                    <ul>${outOfStockItems.map(item => `<li>${item.productName}<\/li>`).join('')}<\/ul>\r\n                                <\/div>\r\n                            `;\r\n                        }\r\n                        \r\n                        if (lowStockItems.length > 0) {\r\n                            alertsHTML += `\r\n                                <div class=\"alert alert-warning\">\r\n                                    <strong>\u26a0\ufe0f ESTOQUE BAIXO:<\/strong> ${lowStockItems.length} produto(s) com estoque baixo!\r\n                                    <ul>${lowStockItems.map(item => `<li>${item.productName} - ${item.quantity} unidades<\/li>`).join('')}<\/ul>\r\n                                <\/div>\r\n                            `;\r\n                        }\r\n                        \r\n                        alertsHTML += '<\/div>';\r\n                        stockAlerts.innerHTML = alertsHTML;\r\n                    }\r\n\r\n                    \/\/ Initialize on load\r\n                    window.addEventListener('DOMContentLoaded', async function() {\r\n                        console.log('\ud83d\ude80 Iniciando aplica\u00e7\u00e3o...');\r\n                        \r\n                        \/\/ Anexar listeners de formul\u00e1rios cr\u00edticos\r\n                        const reservaForm = document.getElementById('reservaForm');\r\n                        if (reservaForm && !reservaForm._listenerAttached) {\r\n                            console.log('\ud83d\udd17 Binding inicial: anexando listener ao reservaForm');\r\n                            reservaForm.addEventListener('submit', function(e) {\r\n                                console.log('\ud83d\udce8 Submit no reservaForm (DOMContentLoaded)');\r\n                                handleReservaSubmit(e);\r\n                            });\r\n                            reservaForm._listenerAttached = true;\r\n                        }\r\n                        \r\n                        \/\/ Verificar autentica\u00e7\u00e3o primeiro\r\n                        const session = await checkSession();\r\n                        \r\n                        if (session) {\r\n                            console.log('\u2705 Sess\u00e3o ativa encontrada:', session.email);\r\n                            await initializeDatabase();\r\n                            console.log('\u2705 Banco de dados inicializado');\r\n                            await checkAuth();\r\n                        } else {\r\n                            console.log('\u2139\ufe0f Nenhuma sess\u00e3o ativa - mostrando tela de login');\r\n                            \/\/ Garantir que apenas a tela de login seja vis\u00edvel\r\n                            document.getElementById('authSection').style.display = 'block';\r\n                            document.getElementById('userDashboard').style.display = 'none';\r\n                            document.getElementById('adminDashboard').style.display = 'none';\r\n                        }\r\n                    });\r\n                <\/script>\r\n            <\/body>\r\n            <\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Compra Garantida Envio Nacional \ud83d\uded2 Compra Garantida Envio Nacional &#8211; Seu marketplace seguro Email Senha Entrar N\u00e3o tem conta? Cadastre-se Nome Completo Email Senha Telefone Endere\u00e7o Completo Cadastrar J\u00e1 tem conta? Fa\u00e7a login \ud83d\uded2 Painel do Usu\u00e1rio Usu\u00e1rio Sair \ud83d\udce6 Cat\u00e1logo \ud83d\udecd\ufe0f Minhas Compras \ud83d\udcb0 Pedidos Vendidos \u21a9\ufe0f Minhas Solicita\u00e7\u00f5es \ud83d\udc64 Meu Perfil Cat\u00e1logo de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-9","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/reserva.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/reserva.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/reserva.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/reserva.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/reserva.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":574,"href":"https:\/\/reserva.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":590,"href":"https:\/\/reserva.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/pages\/9\/revisions\/590"}],"wp:attachment":[{"href":"https:\/\/reserva.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}