# Visão Geral do Get Smart SDK

Esta página fornece uma visão geral de alto nível da biblioteca `redsys-tpv-business-lib`, explicando seu propósito, design arquitetural e a transição técnica de sistemas legados para uma abordagem moderna focada em Kotlin.

A `redsys-tpv-business-lib` é um Android SDK projetado para atuar como uma camada de abstração segura entre sua aplicação e o Get Smart SDK Payment Service. Ele permite integrar funcionalidades de pagamento de forma fácil, rápida e segura, sem a necessidade de gerenciar a complexa lógica de negócios subjacente ou os protocolos de comunicação.

Esta biblioteca substitui a legada `redsysTpvAndroidLib` (`paysyslib.jar`). Ela fornece acesso a todas as funcionalidades principais da Getnet, incluindo:

* **Processamento de Pagamentos**: Gerenciamento de pagamentos padrão.
* **Pré-autorizações**: Manipulação de criação, confirmação e cancelamento de pré-autorizações.
* **Gerenciamento de Operações**: Acesso ao histórico de transações, gerenciamento de sessões e totais.
* **Devoluções**: Processamento de reembolsos e estornos.
* **Configuração**: Gerenciamento de ajustes e chaves.

## Arquitetura

A arquitetura da solução consiste em quatro atores primários que interagem para processar pagamentos e gerenciar o TPV:

1. **App**: Sua aplicação Android desenvolvida pelo integrador.
2. **redsys-tpv-business-lib**: O SDK fornecido pela Getnet. Ele se conecta de forma segura com o Get Smart SDK Payment Service instalado no dispositivo.
3. **Get Smart SDK Payment Service**: Um serviço Android de segundo plano executado no dispositivo. Ele implementa a lógica de negócios, gerencia protocolos de comunicação com o host e lida com as operações de baixo nível.
4. **Host**: O back-office em nuvem da Getnet que processa pagamentos, configurações, logs e outras lógicas de TPV.

### Fluxo de Dados

A arquitetura garante uma clara separação de responsabilidades. Seu app interage com o SDK, que por sua vez se comunica com o Payment Service local. O Payment Service lida com a execução real e a comunicação com o Host remoto.

## Filosofia de Design

A `redsys-tpv-business-lib` adota padrões modernos de desenvolvimento Android para facilitar a integração em arquiteturas de aplicações atuais (como MVVM ou Clean Architecture).

### Kotlin-First e Coroutines

A biblioteca é desenvolvida 100% em Kotlin. Ela utiliza **Kotlin Coroutines** para gerenciar tarefas assíncronas de forma eficiente.

* **Suspend Functions**: Todas as funções de interface da biblioteca são definidas como `suspend`. Isso garante que as operações, que envolvem comunicação de rede com o host, não bloqueiem a thread principal.
* **Context Management**: Todas as execuções alternam automaticamente para `Dispatchers.IO` para garantir o contexto de thread apropriado para operações de rede e disco.

### Repository Pattern e Clean Architecture

A biblioteca segue o **Repository Pattern** e os **princípios SOLID**, organizando a funcionalidade em interfaces distintas (Repositórios) com base em seu domínio específico (ex: `PaymentRepository`, `InitializationRepository`).

Este design oferece vários benefícios fundamentais:

* **Desacoplamento**: Abstrai sua aplicação da camada de dados e de detalhes específicos de implementação.
* **Injeção de Dependência**: A biblioteca foi projetada para funcionar perfeitamente com frameworks de injeção de dependência como **Dagger Hilt**. Você pode configurar repositórios facilmente como singletons.
* **Testabilidade**: O design baseado em interfaces permite substituir implementações reais por repositórios simulados (mocks) durante os testes. Isso permite testar a lógica da sua aplicação independentemente do hardware ou serviço da Getnet.

### Comparação com a Biblioteca Legada

Diferente da legada `paysyslib.jar`, que exigia mais gerenciamento manual de lógica e callbacks, a nova biblioteca oferece uma abordagem estruturada, type-safe e reativa para a integração.

| Recurso | Legado (paysyslib.jar) | Novo (redsys-tpv-business-lib) |
| :---- | :---- | :---- |
| **Linguagem** | Java | Kotlin |
| **Concorrência** | Callbacks/Threads | Coroutines (funções `suspend`) |
| **Arquitetura** | Monolítica | Repository Pattern / Clean Architecture |
| **Integração** | Instanciação manual | Pronto para Injeção de Dependência (Hilt) |