{
    "openapi": "3.0.0",
    "info": {
        "title": "Eco Sistema API",
        "description": "API REST do Eco Sistema MVP — Módulo Ambiental e Turístico com Roteiro Inteligente",
        "contact": {
            "name": "Equipe Eco Sistema",
            "email": "admin@ecosistema.com"
        },
        "version": "1.0.0"
    },
    "servers": [
        {
            "url": "http://localhost:8000",
            "description": "Servidor local de desenvolvimento"
        }
    ],
    "paths": {
        "/api/v1/auth/register": {
            "post": {
                "tags": [
                    "Autenticação"
                ],
                "summary": "Cadastrar novo usuário",
                "operationId": "b9e746d77661fb8df55d0ac63e1ece77",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "name",
                                    "email",
                                    "password",
                                    "password_confirmation"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "example": "João Silva"
                                    },
                                    "email": {
                                        "type": "string",
                                        "format": "email",
                                        "example": "joao@email.com"
                                    },
                                    "password": {
                                        "type": "string",
                                        "format": "password",
                                        "example": "senha123"
                                    },
                                    "password_confirmation": {
                                        "type": "string",
                                        "example": "senha123"
                                    },
                                    "user_type": {
                                        "type": "string",
                                        "example": "turista",
                                        "enum": [
                                            "cidadao",
                                            "turista",
                                            "ambos"
                                        ]
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Usuário cadastrado com sucesso"
                    },
                    "422": {
                        "description": "Dados inválidos"
                    }
                }
            }
        },
        "/api/v1/auth/login": {
            "post": {
                "tags": [
                    "Autenticação"
                ],
                "summary": "Fazer login",
                "operationId": "a7997e7c1e3bfed64d4e56de82415931",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "email",
                                    "password"
                                ],
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "format": "email",
                                        "example": "admin@ecosistema.com"
                                    },
                                    "password": {
                                        "type": "string",
                                        "format": "password",
                                        "example": "password"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Login bem-sucedido"
                    },
                    "422": {
                        "description": "Credenciais inválidas"
                    }
                }
            }
        },
        "/api/v1/auth/logout": {
            "post": {
                "tags": [
                    "Autenticação"
                ],
                "summary": "Fazer logout",
                "operationId": "f6b8957b4c0b25636613a9f0512a8ba9",
                "responses": {
                    "200": {
                        "description": "Logout bem-sucedido"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/auth/refresh": {
            "post": {
                "tags": [
                    "Autenticação"
                ],
                "summary": "Renovar token sem novo login",
                "operationId": "c42c3cd7fd7fe0dbd5bcc42962059e90",
                "responses": {
                    "200": {
                        "description": "Token renovado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/auth/perfil": {
            "get": {
                "tags": [
                    "Autenticação"
                ],
                "summary": "Dados do usuário autenticado",
                "operationId": "4b413552336b0ffe882be3aac1c8903b",
                "responses": {
                    "200": {
                        "description": "Perfil retornado"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/avaliacoes": {
            "post": {
                "tags": [
                    "Avaliações"
                ],
                "summary": "Criar ou atualizar avaliação (1 por usuário por local)",
                "operationId": "ad2b831313acb6fa0e37828a7ba10aab",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "tipo",
                                    "id",
                                    "nota"
                                ],
                                "properties": {
                                    "tipo": {
                                        "type": "string",
                                        "example": "ponto",
                                        "enum": [
                                            "ponto",
                                            "restaurante"
                                        ]
                                    },
                                    "id": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "nota": {
                                        "type": "integer",
                                        "example": 4,
                                        "maximum": 5,
                                        "minimum": 1
                                    },
                                    "comentario": {
                                        "type": "string",
                                        "example": "Ótimo lugar!",
                                        "nullable": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Avaliação salva"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Dados inválidos"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/checkins": {
            "post": {
                "tags": [
                    "Check-in"
                ],
                "summary": "Registrar check-in (validação GPS: máx 200m do ponto, sem duplicata em 24h)",
                "operationId": "cbcd91d6c1b7d7a9c9e98b020c8497d2",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "ponto_id",
                                    "latitude",
                                    "longitude"
                                ],
                                "properties": {
                                    "ponto_id": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "latitude": {
                                        "type": "number",
                                        "format": "float",
                                        "example": -22.9519
                                    },
                                    "longitude": {
                                        "type": "number",
                                        "format": "float",
                                        "example": -43.2105
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Check-in registrado com sucesso"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Muito longe do ponto ou check-in duplicado hoje"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/checkins/meus": {
            "get": {
                "tags": [
                    "Check-in"
                ],
                "summary": "Listar meus check-ins (paginado, mais recente primeiro)",
                "operationId": "efc1ffd8865ae517f4e02a057d8b2f50",
                "responses": {
                    "200": {
                        "description": "Lista paginada de check-ins do usuário"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/doacoes": {
            "get": {
                "tags": [
                    "Doações"
                ],
                "summary": "Listar todas as doações — admin (paginado)",
                "operationId": "cd232e01e8fff34c65842fe7e7953db0",
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "pendente",
                                "confirmada",
                                "cancelada"
                            ]
                        }
                    },
                    {
                        "name": "user_id",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "eco_ponto_id",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada de todas as doações"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "post": {
                "tags": [
                    "Doações"
                ],
                "summary": "Registrar doação de material reciclável",
                "operationId": "713fbe98ca253889b8678f36a3e2a31c",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "tipo_material",
                                    "quantidade_kg"
                                ],
                                "properties": {
                                    "eco_ponto_id": {
                                        "type": "integer",
                                        "example": 1,
                                        "nullable": true
                                    },
                                    "tipo_material": {
                                        "type": "string",
                                        "example": "plastico"
                                    },
                                    "quantidade_kg": {
                                        "type": "number",
                                        "format": "float",
                                        "example": 2.5
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Doação registrada"
                    },
                    "401": {
                        "description": "Não autenticado"
                    },
                    "422": {
                        "description": "Dados inválidos"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/doacoes/minhas": {
            "get": {
                "tags": [
                    "Doações"
                ],
                "summary": "Listar minhas doações (paginado)",
                "operationId": "e45cf1824907cba3f765e0ca0f369456",
                "responses": {
                    "200": {
                        "description": "Lista paginada de doações do usuário"
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/doacoes/{id}/confirmar": {
            "patch": {
                "tags": [
                    "Doações"
                ],
                "summary": "Confirmar doação (admin/parceiro)",
                "operationId": "93c92417a3c0a6829ea98af64f2ee8aa",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Doação confirmada"
                    },
                    "404": {
                        "description": "Não encontrada"
                    },
                    "422": {
                        "description": "Status inválido para confirmação"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/doacoes/{id}/cancelar": {
            "patch": {
                "tags": [
                    "Doações"
                ],
                "summary": "Cancelar doação (admin/parceiro)",
                "operationId": "d2fdf73f06e099c1606ebba79d473c1a",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Doação cancelada"
                    },
                    "404": {
                        "description": "Não encontrada"
                    },
                    "422": {
                        "description": "Já cancelada"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/ecopontos": {
            "get": {
                "tags": [
                    "Ecopontos"
                ],
                "summary": "Listar ecopontos com filtros",
                "operationId": "1262734c16bad42792ece3a514f007e1",
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "ativo",
                                "inativo",
                                "temporariamente_fechado"
                            ]
                        }
                    },
                    {
                        "name": "tipo_residuo",
                        "in": "query",
                        "description": "Filtrar por tipo de resíduo aceito",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "cidade",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada de ecopontos"
                    }
                }
            },
            "post": {
                "tags": [
                    "Ecopontos"
                ],
                "summary": "Criar ecoponto (admin/parceiro)",
                "operationId": "08b6ce526905fae3ffe178d27d37bbd6",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "nome",
                                    "endereco",
                                    "latitude",
                                    "longitude"
                                ],
                                "properties": {
                                    "nome": {
                                        "type": "string",
                                        "example": "Ecoponto Centro"
                                    },
                                    "descricao": {
                                        "type": "string"
                                    },
                                    "endereco": {
                                        "type": "string"
                                    },
                                    "latitude": {
                                        "type": "number",
                                        "format": "float"
                                    },
                                    "longitude": {
                                        "type": "number",
                                        "format": "float"
                                    },
                                    "tipos_residuo": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "example": [
                                            "plastico",
                                            "vidro",
                                            "metal"
                                        ]
                                    },
                                    "horario_funcionamento": {
                                        "type": "object"
                                    },
                                    "status": {
                                        "type": "string",
                                        "enum": [
                                            "ativo",
                                            "inativo",
                                            "temporariamente_fechado"
                                        ]
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Ecoponto criado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    },
                    "422": {
                        "description": "Dados inválidos"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/ecopontos/proximos": {
            "get": {
                "tags": [
                    "Ecopontos"
                ],
                "summary": "Ecopontos próximos por raio (Haversine)",
                "operationId": "5e51ee692a0cb8139f669c6fb91a3081",
                "parameters": [
                    {
                        "name": "lat",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "number",
                            "format": "float"
                        }
                    },
                    {
                        "name": "lng",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "number",
                            "format": "float"
                        }
                    },
                    {
                        "name": "raio",
                        "in": "query",
                        "description": "Raio em KM (padrão 10, máx 50)",
                        "required": false,
                        "schema": {
                            "type": "number"
                        }
                    },
                    {
                        "name": "tipo_residuo",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada com distancia_km calculada"
                    },
                    "422": {
                        "description": "Parâmetros inválidos"
                    }
                }
            }
        },
        "/api/v1/ecopontos/{id}": {
            "get": {
                "tags": [
                    "Ecopontos"
                ],
                "summary": "Detalhe do ecoponto",
                "operationId": "e87dbd3226a0e24ec08db624fdcd46ec",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Detalhe do ecoponto com total de doações"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                }
            },
            "put": {
                "tags": [
                    "Ecopontos"
                ],
                "summary": "Atualizar ecoponto (admin/parceiro)",
                "operationId": "d920166bc4846c1254a047e30ff9f197",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "nome": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ecoponto atualizado"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "Ecopontos"
                ],
                "summary": "Remover ecoponto — soft delete (admin)",
                "operationId": "3ee604a5562ae594af00f462daa9976e",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/pontos-turisticos": {
            "get": {
                "tags": [
                    "Pontos Turísticos"
                ],
                "summary": "Listar pontos turísticos com filtros",
                "operationId": "da6cc1c32882c7a6afc58253e47d8993",
                "parameters": [
                    {
                        "name": "tipo_id",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "description": "ID do tipo",
                            "type": "integer"
                        }
                    },
                    {
                        "name": "cidade",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada de pontos turísticos"
                    }
                }
            },
            "post": {
                "tags": [
                    "Pontos Turísticos"
                ],
                "summary": "Criar ponto turístico (admin/parceiro)",
                "operationId": "0847c7e2a9c07410d9797e8aedf6b65c",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "nome",
                                    "tipo_id",
                                    "endereco",
                                    "cidade",
                                    "estado",
                                    "latitude",
                                    "longitude"
                                ],
                                "properties": {
                                    "nome": {
                                        "type": "string"
                                    },
                                    "descricao": {
                                        "type": "string"
                                    },
                                    "tipo_id": {
                                        "description": "ID do tipo (veja /api/v1/tipos)",
                                        "type": "integer"
                                    },
                                    "endereco": {
                                        "type": "string"
                                    },
                                    "cidade": {
                                        "type": "string"
                                    },
                                    "estado": {
                                        "type": "string"
                                    },
                                    "latitude": {
                                        "type": "number"
                                    },
                                    "longitude": {
                                        "type": "number"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Ponto turístico criado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    },
                    "422": {
                        "description": "Dados inválidos"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/pontos-turisticos/proximos": {
            "get": {
                "tags": [
                    "Pontos Turísticos"
                ],
                "summary": "Pontos turísticos próximos (Haversine)",
                "operationId": "5dbbec30cf8b27fecba89f977ac8c8da",
                "parameters": [
                    {
                        "name": "lat",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "number",
                            "format": "float"
                        }
                    },
                    {
                        "name": "lng",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "number",
                            "format": "float"
                        }
                    },
                    {
                        "name": "raio",
                        "in": "query",
                        "description": "Raio em KM (padrão 10, máx 50)",
                        "required": false,
                        "schema": {
                            "type": "number"
                        }
                    },
                    {
                        "name": "tipo_id",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "description": "ID do tipo",
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada com distancia_km calculada"
                    },
                    "422": {
                        "description": "Parâmetros inválidos"
                    }
                }
            }
        },
        "/api/v1/pontos-turisticos/{id}": {
            "get": {
                "tags": [
                    "Pontos Turísticos"
                ],
                "summary": "Detalhe completo do ponto turístico",
                "operationId": "da71fafa8de9393bd19a3f058f70c6f7",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Detalhe com imagens, avaliação e checkins"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "put": {
                "tags": [
                    "Pontos Turísticos"
                ],
                "summary": "Atualizar ponto turístico (admin/parceiro)",
                "operationId": "b3e2a4ebe1da5fb4830fec27aa5320c7",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "nome": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ponto atualizado"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "Pontos Turísticos"
                ],
                "summary": "Remover ponto turístico — soft delete (admin)",
                "operationId": "77e8b78112d8ca06aef06e98faa6c6f6",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/pontos-turisticos/{id}/como-chegar": {
            "get": {
                "tags": [
                    "Pontos Turísticos"
                ],
                "summary": "Como chegar — distância Haversine + link Google Maps",
                "operationId": "ca1770ed938c619679b7f186181bab1a",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "lat_origem",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "number"
                        }
                    },
                    {
                        "name": "lng_origem",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "number"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Distância, tempo estimado e link Google Maps"
                    },
                    "422": {
                        "description": "Parâmetros inválidos"
                    }
                }
            }
        },
        "/api/v1/pontos-turisticos/{id}/imagens": {
            "post": {
                "tags": [
                    "Pontos Turísticos"
                ],
                "summary": "Upload de imagem para ponto turístico",
                "operationId": "8958d324bf8d517973961001aee97be1",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "required": [
                                    "imagem"
                                ],
                                "properties": {
                                    "imagem": {
                                        "description": "Arquivo de imagem (jpg, png, gif, webp)",
                                        "type": "string",
                                        "format": "binary"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Imagem enviada"
                    },
                    "422": {
                        "description": "Arquivo inválido"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/pontos-turisticos/{id}/imagens/{imagemId}": {
            "delete": {
                "tags": [
                    "Pontos Turísticos"
                ],
                "summary": "Remover imagem do ponto turístico",
                "operationId": "db4246fb4249e57d4602420af65dd515",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "imagemId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Imagem removida"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/pontos-turisticos/{id}/avaliacoes": {
            "get": {
                "tags": [
                    "Avaliações"
                ],
                "summary": "Listar avaliações do ponto turístico",
                "operationId": "da90a2516b4e4ec61c54ad17a2cd42c9",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada de avaliações"
                    }
                }
            }
        },
        "/api/v1/tipos": {
            "get": {
                "tags": [
                    "Tipos"
                ],
                "summary": "Listar todos os tipos disponíveis",
                "operationId": "8ca7613d7cc62f13467b27ffb1469928",
                "responses": {
                    "200": {
                        "description": "Lista de tipos"
                    }
                }
            }
        },
        "/api/v1/restaurantes": {
            "get": {
                "tags": [
                    "Restaurantes"
                ],
                "summary": "Listar restaurantes com filtros",
                "operationId": "a447af542e15d75bc7121377bccd15dd",
                "parameters": [
                    {
                        "name": "tipo_comida",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "cidade",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada de restaurantes"
                    }
                }
            },
            "post": {
                "tags": [
                    "Restaurantes"
                ],
                "summary": "Criar restaurante (admin/parceiro)",
                "operationId": "58ab3e0ed50bd9d58b4b3cc015b966e6",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "nome",
                                    "tipo_comida",
                                    "endereco",
                                    "cidade",
                                    "estado",
                                    "latitude",
                                    "longitude"
                                ],
                                "properties": {
                                    "nome": {
                                        "type": "string"
                                    },
                                    "tipo_comida": {
                                        "type": "string",
                                        "enum": [
                                            "brasileira",
                                            "italiana",
                                            "japonesa",
                                            "fast_food",
                                            "frutos_mar",
                                            "vegetariana",
                                            "variada",
                                            "outro"
                                        ]
                                    },
                                    "preco_medio": {
                                        "type": "number"
                                    },
                                    "endereco": {
                                        "type": "string"
                                    },
                                    "cidade": {
                                        "type": "string"
                                    },
                                    "estado": {
                                        "type": "string"
                                    },
                                    "latitude": {
                                        "type": "number"
                                    },
                                    "longitude": {
                                        "type": "number"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Restaurante criado"
                    },
                    "403": {
                        "description": "Sem permissão"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/restaurantes/proximos": {
            "get": {
                "tags": [
                    "Restaurantes"
                ],
                "summary": "Restaurantes próximos por raio",
                "operationId": "42a3693bef426087a4825ee3bba9d5dd",
                "parameters": [
                    {
                        "name": "lat",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "number",
                            "format": "float"
                        }
                    },
                    {
                        "name": "lng",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "number",
                            "format": "float"
                        }
                    },
                    {
                        "name": "raio",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "number"
                        }
                    },
                    {
                        "name": "tipo_comida",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista com distancia_km"
                    },
                    "422": {
                        "description": "Parâmetros inválidos"
                    }
                }
            }
        },
        "/api/v1/restaurantes/{id}": {
            "get": {
                "tags": [
                    "Restaurantes"
                ],
                "summary": "Detalhe do restaurante",
                "operationId": "55aa0fd80a3c02b26561a2fb9af59534",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Detalhe com imagens e avaliação"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                }
            },
            "put": {
                "tags": [
                    "Restaurantes"
                ],
                "summary": "Atualizar restaurante (admin/parceiro)",
                "operationId": "cbea63c7dcd5992f6719ac89b739a6be",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "nome": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Atualizado"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "Restaurantes"
                ],
                "summary": "Remover restaurante — soft delete (admin)",
                "operationId": "119643748a14b34db6eb335eedf1bb84",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Removido"
                    },
                    "404": {
                        "description": "Não encontrado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/restaurantes/{id}/imagens": {
            "post": {
                "tags": [
                    "Restaurantes"
                ],
                "summary": "Upload de imagem para restaurante",
                "operationId": "6059331df80df17f4e09869663635e7f",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "required": [
                                    "imagem"
                                ],
                                "properties": {
                                    "imagem": {
                                        "description": "Arquivo de imagem (jpg, png, gif, webp)",
                                        "type": "string",
                                        "format": "binary"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Imagem enviada"
                    },
                    "422": {
                        "description": "Arquivo inválido"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/restaurantes/{id}/avaliacoes": {
            "get": {
                "tags": [
                    "Avaliações"
                ],
                "summary": "Listar avaliações do restaurante",
                "operationId": "6c84e8900f9ae9da88a2ba61a34606fc",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lista paginada de avaliações"
                    }
                }
            }
        },
        "/api/v1/meu-roteiro": {
            "get": {
                "tags": [
                    "Roteiro"
                ],
                "summary": "Meu roteiro turístico com estatísticas",
                "operationId": "984c51c53c90fbbcb5db7708a0667fa3",
                "responses": {
                    "200": {
                        "description": "Lista de locais visitados com estatísticas",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "data": {
                                            "properties": {
                                                "itens": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "object"
                                                    }
                                                },
                                                "estatisticas": {
                                                    "properties": {
                                                        "total_lugares_visitados": {
                                                            "type": "integer",
                                                            "example": 5
                                                        },
                                                        "total_cidades_visitadas": {
                                                            "type": "integer",
                                                            "example": 2
                                                        },
                                                        "primeiro_checkin": {
                                                            "type": "string",
                                                            "nullable": true
                                                        },
                                                        "ultimo_checkin": {
                                                            "type": "string",
                                                            "nullable": true
                                                        }
                                                    },
                                                    "type": "object"
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Não autenticado"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        }
    },
    "components": {
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "bearerFormat": "sanctum",
                "scheme": "bearer"
            }
        }
    },
    "tags": [
        {
            "name": "Autenticação",
            "description": "Endpoints de login, registro e gerenciamento de token"
        },
        {
            "name": "Pontos Turísticos",
            "description": "CRUD e consultas de pontos turísticos"
        },
        {
            "name": "Restaurantes",
            "description": "CRUD e consultas de restaurantes"
        },
        {
            "name": "Avaliações",
            "description": "Avaliações polimórficas de pontos e restaurantes"
        },
        {
            "name": "Check-in",
            "description": "Check-in com validação de geolocalização"
        },
        {
            "name": "Roteiro",
            "description": "Roteiro turístico pessoal gerado automaticamente"
        },
        {
            "name": "Doações",
            "description": "Doações"
        },
        {
            "name": "Ecopontos",
            "description": "Ecopontos"
        },
        {
            "name": "Tipos",
            "description": "Tipos"
        }
    ]
}