import 'package:dio/dio.dart';

import '../about/external/data/pages/request/CommitmentsRequest.dart';
import '../about/external/data/pages/request/HistoryRequest.dart';
import '../about/external/initial/AbandonRequest.dart';
import '../about/external/initial/AmnestyRequest.dart';
import '../about/external/initial/CommitmentRequest.dart';
import '../about/external/initial/CompletionRequest.dart';
import '../about/external/initial/DeferralRequest.dart';
import '../about/external/initial/DeviceRequest.dart';
import '../about/external/initial/GoalRequest.dart';
import '../about/external/initial/IdRequest.dart';
import '../about/external/initial/LoginData.dart';
import '../about/external/initial/ReportCardRequest.dart';
import '../about/external/initial/SessionLogRequest.dart';
import '../about/external/initial/SickModeRequest.dart';
import '../about/external/initial/ToneRequest.dart';

abstract class ConnectComms {
  // ── Auth ────────────────────────────────────────────────────────────────
  Future<Response> registerDevice(DeviceRequest request);

  Future<Response> registerDeviceToken(String token);

  Future<Response> login(LoginData request);

  Future<Response> logout();

  Future<Response> me();

  // ── Goals ───────────────────────────────────────────────────────────────
  Future<Response> getMyGoals(HistoryRequest request);

  Future<Response> saveGoalEntry(GoalRequest request);

  Future<Response> getGoalTasks(IdRequest request);

  Future<Response> archiveGoalEntry(IdRequest request);

  // ── Commitments ─────────────────────────────────────────────────────────
  Future<Response> getTodayPlan(CommitmentsRequest request);

  Future<Response> getMyCommitments(CommitmentsRequest request);

  Future<Response> getOverdueQueue(HistoryRequest request);

  Future<Response> saveCommitmentEntry(CommitmentRequest request);

  Future<Response> updateCommitmentEntry(CommitmentRequest request);

  Future<Response> deleteCommitmentEntry(IdRequest request);

  Future<Response> completeCommitmentEntry(CompletionRequest request);

  Future<Response> deferCommitmentEntry(DeferralRequest request);

  Future<Response> abandonCommitmentEntry(AbandonRequest request);

  Future<Response> getCommitmentHistory(HistoryRequest request);

  Future<Response> getCommitmentEvents(IdRequest request);

  // ── Capacity ────────────────────────────────────────────────────────────
  Future<Response> checkCapacity(CommitmentsRequest request);

  Future<Response> getCapacityProfileEntry();

  // ── Debt & standing ─────────────────────────────────────────────────────
  Future<Response> getDebtSummary();

  Future<Response> getDebtLedger(HistoryRequest request);

  Future<Response> getDebtTrend(ReportCardRequest request);

  Future<Response> getStanding();

  Future<Response> getStandingHistory(HistoryRequest request);

  // ── Excuses ─────────────────────────────────────────────────────────────
  Future<Response> getExcuseClusters(ReportCardRequest request);

  // ── Proof ───────────────────────────────────────────────────────────────
  Future<Response> uploadPhotoProof(FormData request);

  Future<Response> submitTimerProofEntry(CompletionRequest request);

  Future<Response> submitLocationProofEntry(CompletionRequest request);

  // ── Guardrails ──────────────────────────────────────────────────────────
  Future<Response> spendAmnestyToken(AmnestyRequest request);

  Future<Response> getAmnestyBalance();

  Future<Response> updateSickMode(SickModeRequest request);

  Future<Response> checkDistress();

  Future<Response> updateTone(ToneRequest request);

  // ── Habits & routines ───────────────────────────────────────────────────
  Future<Response> getMyHabits(HistoryRequest request);

  Future<Response> saveHabitEntry(Map<String, dynamic> request);

  Future<Response> logHabitEntry(IdRequest request);

  Future<Response> getKeystoneHabits();

  Future<Response> getMyRoutines(HistoryRequest request);

  Future<Response> logRoutineChainEntry(Map<String, dynamic> request);

  // ── Training ────────────────────────────────────────────────────────────
  Future<Response> getMyPrograms(HistoryRequest request);

  Future<Response> saveProgramEntry(Map<String, dynamic> request);

  Future<Response> activateProgramEntry(IdRequest request);

  Future<Response> getProgramSessions(IdRequest request);

  Future<Response> startSessionEntry(IdRequest request);

  Future<Response> saveSessionLogEntry(SessionLogRequest request);

  Future<Response> getSessionHistory(HistoryRequest request);

  Future<Response> getLastSessionFor(IdRequest request);

  Future<Response> getWeeklyVolume(ReportCardRequest request);

  Future<Response> getContactVolume(ReportCardRequest request);

  Future<Response> getPersonalRecords(HistoryRequest request);

  // ── Report card ─────────────────────────────────────────────────────────
  Future<Response> getWeeklyReportCard(ReportCardRequest request);

  Future<Response> getMonthlyReportCard(ReportCardRequest request);

  // ── Notifications ───────────────────────────────────────────────────────
  Future<Response> getMyNotifications(HistoryRequest request);

  Future<Response> acknowledgeNudgeEntry(IdRequest request);
}
