# OFFICE — Catálogo Premium de Óculos de Sol

Plataforma completa em PHP 8 + MySQL com painel administrativo, catálogo digital responsivo, sistema de pedidos online e geração de catálogo PDF premium.

---

## Stack

- **PHP 8.2+**
- **MySQL 8+**
- **Arquitetura MVC** (sem framework pesado, puro e rápido)
- **Dompdf** para geração de PDF
- **PHPMailer** para envio de e-mails via SMTP
- **Bootstrap-style** CSS próprio com identidade OFFICE
- Pronto para **cPanel**

---

## Estrutura de pastas

```
office/
├── app/
│   ├── controllers/     → Controllers da aplicação
│   ├── core/            → Classes base (Router, Model, Controller, Database)
│   ├── helpers/         → Funções utilitárias globais
│   ├── models/          → Models (Produto, Pedido, Categoria, etc.)
│   └── views/
│       ├── layouts/     → Layouts público e admin
│       ├── public/      → Views do site público
│       ├── admin/       → Views do painel
│       ├── pdf/         → Template do catálogo PDF
│       └── emails/      → Templates de e-mails
├── config/
│   └── config.php       → ⚡ Configurar banco, SMTP, URL base
├── database/
│   ├── schema.sql       → SQL completo (importar no phpMyAdmin)
│   └── gerar_hash_senha.php → Gerador de hash (apagar após usar)
├── public/              → DocumentRoot (onde o domínio aponta)
│   ├── index.php        → Front controller (todas as rotas)
│   ├── .htaccess        → Reescrita de URL
│   ├── assets/          → CSS, JS, imagens do tema
│   └── uploads/         → Uploads de produtos, logo, banners, catálogos
├── vendor/              → (criado pelo Composer)
├── .htaccess            → Redireciona raiz para /public
├── composer.json
└── README.md
```

---

## Instalação passo a passo

### 1. Subir os arquivos

Envie toda a pasta `office/` para o servidor via **FTP** ou pelo **File Manager** do cPanel.

### 2. Apontar o domínio para `/public`

No cPanel, em **Domains → Document Root**, aponte seu domínio para:

```
/home/SEU_USUARIO/public_html/office/public
```

Se **não for possível** alterar o Document Root (ex: hospedagem compartilhada restrita), o `.htaccess` da raiz já redireciona tudo para `/public`, então funciona mesmo sem alterar.

### 3. Criar o banco MySQL

No cPanel:

1. **MySQL Databases → Create Database**: `seuuser_office`
2. **Create User**: `seuuser_office` com senha forte
3. **Add User to Database** com privilégios totais
4. **phpMyAdmin → Import** → envie `database/schema.sql`

### 4. Configurar `config/config.php`

Abra `/config/config.php` e edite:

```php
// URL base (SEM barra no final!)
define('BASE_URL', 'https://seudominio.com.br');

// Se NÃO alterou o Document Root, use:
// define('BASE_URL', 'https://seudominio.com.br/public');

// Banco de dados
define('DB_HOST', 'localhost');
define('DB_NAME', 'seuuser_office');
define('DB_USER', 'seuuser_office');
define('DB_PASS', 'sua_senha_do_banco');

// SMTP (opcional — o sistema funciona sem, mas sem envio de e-mail)
define('MAIL_HOST', 'smtp.seuservidor.com.br');
define('MAIL_PORT', 587);
define('MAIL_USER', 'contato@seudominio.com.br');
define('MAIL_PASS', 'senha_do_email');
define('MAIL_FROM_EMAIL', 'contato@seudominio.com.br');
define('MAIL_ADMIN', 'pedidos@seudominio.com.br');
```

> 💡 **Em produção**, desative `display_errors`:
> ```php
> error_reporting(0);
> ini_set('display_errors', 0);
> ```

### 5. Instalar as dependências (Dompdf + PHPMailer)

Via **Terminal do cPanel** ou **SSH**:

```bash
cd ~/public_html/office
composer install
```

**Sem acesso a Composer?** Você pode baixar e subir manualmente:
- Dompdf: https://github.com/dompdf/dompdf/releases
- PHPMailer: https://github.com/PHPMailer/PHPMailer/releases

Extraia ambos em `/vendor/` mantendo a estrutura `vendor/dompdf/dompdf/` e `vendor/phpmailer/phpmailer/`, e rode o `composer install` assim que possível para gerar o autoload. Como alternativa rápida, instale em sua máquina local e suba a pasta `vendor/` inteira via FTP.

### 6. Permissões das pastas de upload

Via cPanel File Manager (ou SSH), deixe 755 (ou 775 se necessário):

```
public/uploads/
public/uploads/produtos/
public/uploads/banners/
public/uploads/logo/
public/uploads/catalogos/
```

### 7. Gerar o hash da senha do admin

⚠ **Importante**: a senha `admin123` fornecida no SQL tem um hash placeholder — você precisa gerar um novo:

1. Acesse no navegador: `https://seudominio.com.br/database/gerar_hash_senha.php`
2. Digite a senha desejada (ex: `admin123` ou outra)
3. Copie o `UPDATE ...` gerado e execute no **phpMyAdmin**
4. **⚠ APAGUE o arquivo** `/database/gerar_hash_senha.php` do servidor

### 8. Primeiro login

Acesse:

```
https://seudominio.com.br/admin/login
```

Use:
- **E-mail**: `admin@office.com.br`
- **Senha**: a que você definiu no passo 7

---

## Funcionalidades

### Área pública
- Home institucional com hero, destaques e categorias
- Catálogo com filtros (categoria, coleção, material, cor, polarizado, UV), busca e ordenação
- Página individual do produto com galeria, variações de cor, especificações técnicas
- Carrinho de pedido (sessão)
- Checkout com todos os campos solicitados (nome, empresa, telefone, e-mail, cidade, estado, CPF/CNPJ, observações)
- Tela de confirmação + envio por WhatsApp
- Páginas Sobre, Contato e 404

### Painel administrativo
- Login seguro (bcrypt)
- Dashboard com métricas (total de pedidos, novos, mensais, produtos ativos)
- CRUD completo de produtos com upload múltiplo de imagens e variações de cor
- Definir imagem principal, ativar/desativar, destacar
- CRUD de categorias e coleções
- Gestão de pedidos com filtros, detalhe e alteração de status
- Configurações da marca (logo, cores, banner, textos, contatos, redes, SEO)
- Gerador de **catálogo PDF** (completo, por categoria ou coleção) com histórico de downloads

### Catálogo PDF
- Capa elegante com logo e ano
- Página institucional de introdução
- Grid 2×2 de produtos por página com imagem, nome, SKU, descrição, atributos e preço
- Rodapé com numeração automática
- Download direto pelo painel

---

## Rotas principais

| URL | Descrição |
|-----|-----------|
| `/` | Home |
| `/catalogo` | Catálogo com filtros |
| `/produto/{slug}` | Página do produto |
| `/carrinho` | Carrinho / pedido |
| `/checkout` | Finalizar pedido |
| `/admin/login` | Login admin |
| `/admin/dashboard` | Painel |
| `/admin/produtos` | Gestão de produtos |
| `/admin/pedidos` | Gestão de pedidos |
| `/admin/catalogo-pdf` | Geração de PDF |
| `/admin/configuracoes` | Ajustes da marca |

---

## Customização

### Cores e logo
Todas as cores são configuráveis no painel em **Configurações**. A CSS do site lê dinamicamente as cores definidas.

### Adicionar novas rotas
Edite `public/index.php` e adicione:

```php
$router->get('/minha-rota', 'MeuController@metodo');
```

### Criar novo model
1. Crie `app/models/MeuModel.php` estendendo `Model`
2. Use em um controller: `$this->model('MeuModel')`

---

## Segurança

- ✅ PDO com prepared statements em **todas** as queries
- ✅ Senhas com bcrypt (cost 10)
- ✅ Proteção CSRF em todos os formulários POST
- ✅ Validação de tipo MIME nos uploads
- ✅ Escape de HTML via helper `e()`
- ✅ Sessão protegida no admin

**Recomendações de produção**:
- Use HTTPS obrigatório (Let's Encrypt no cPanel)
- Altere a senha padrão do admin no primeiro acesso
- Remova `database/gerar_hash_senha.php` após uso
- Defina `error_reporting(0)` em `config/config.php`
- Mantenha backups regulares do banco e da pasta `/uploads`

---

## Suporte / Troubleshooting

**"Erro de conexão com o banco"** → Confira `DB_*` em `config/config.php`

**Páginas dão 404** → Verifique se `mod_rewrite` está ativo e se `.htaccess` foi enviado

**PDF não gera** → Rode `composer install` para baixar o Dompdf

**E-mail não envia** → Configure SMTP corretamente; o sistema tenta fallback via `mail()` do PHP

**Upload falha** → Verifique permissões de `/public/uploads/*` (755 ou 775)

---

## Licença

Projeto desenvolvido sob medida para a marca OFFICE.

© <?= date('Y') ?> OFFICE — Todos os direitos reservados.
