import 'package:drift/drift.dart';
import 'package:sendtrain/database/database.dart';

part 'activities_dao.g.dart';

@DriftAccessor(tables: [Activities])
class ActivitiesDao extends DatabaseAccessor<AppDatabase> with _$ActivitiesDaoMixin {
  ActivitiesDao(super.db);

  Future<List<Activity>> all() async {
    return await select(activities).get();
  }

  Future<Activity> find(int id) async {
    return await (select(activities)..where((activity) => activity.id.equals(id) )).getSingle();
  }

  Future<List<Activity>> sessionActivities(int id) async {
     final result = select(db.sessionActivities).join(
      [
        innerJoin(
          db.activities,
          db.activities.id
              .equalsExp(db.sessionActivities.activityId),
        ),
      ],
    )..where(db.sessionActivities.sessionId.equals(id));

    final activities = (await result.get())
        .map((e) => e.readTable(db.activities))
        .toList();

    return activities;
  }
}