class Conta {
  const Conta({
    required this.id,
    required this.email,
    required this.displayName,
  });

  factory Conta.doJson(Map<String, dynamic> j) => Conta(
    id: j['id'] as String,
    email: j['email'] as String,
    displayName: j['displayName'] as String,
  );

  final String id;
  final String email;
  final String displayName;
}

/// Contrato de autenticação visto pela apresentação.
///
/// Duas implementações durante a migração: a HTTP, do backend NestJS, e a do
/// Firebase Auth. **A tela não sabe qual está em uso** — é o que faz `MG-7` ser
/// invisível para o participante, que é o critério da story.
abstract class AuthRepository {
  /// Cadastro. Não faz login automático: quem orquestra é o controller, para o
  /// convite poder seguir direto ao bolão depois (CC-5).
  Future<Conta> cadastrar({
    required String email,
    required String senha,
    required String nomeExibicao,
  });

  Future<void> entrar({required String email, required String senha});

  /// Conta da sessão atual. Usado no cold start para saber se ainda vale.
  Future<Conta> minhaConta();

  Future<void> sair();
}
