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

part 'actions_dao.g.dart';

@DriftAccessor(tables: [Actions])
class ActionsDao extends DatabaseAccessor<AppDatabase> with _$ActionsDaoMixin {
  ActionsDao(super.db);

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

  Future<Action> find(int id) async {
    return await (select(actions)..where((action) => action.id.equals(id) )).getSingle();
  }

  Future<List<Action>> fromActivity(Activity activity) async {
    final result = select(db.activityActions).join(
      [
        innerJoin(
          db.actions,
          db.actions.id.equalsExp(db.activityActions.actionId),
        ),
      ],
    )
      ..where(db.activityActions.activityId.equals(activity.id));

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

    return actions;
  }
}