import type { Context } from "hono";
import type Redis from "ioredis";
import type { Kysely } from "kysely";
import type { DB } from "./db";

interface Variables {
  datastore: Kysely<DB>;
  memberDatastore: Kysely<DB>;
  redisDB: Redis;
  redisSubscriber: Redis;
}

export interface RepositoryContext extends Context<{ Variables: Variables }> { }

export class BaseRepository {
  datastore: Variables["datastore"];
  // The member-facing tables (members, users, sessions, member_profiles…)
  // live in the Updot member database, not the console's own database.
  memberDatastore: Variables["memberDatastore"];
  redisDB: Variables["redisDB"];
  constructor(ctx: RepositoryContext) {
    this.datastore = ctx.get("datastore");
    this.memberDatastore = ctx.get("memberDatastore");
    this.redisDB = ctx.get("redisDB");
  }
}
