import { Injectable } from '@nestjs/common';
import { and, eq } from 'drizzle-orm';
import { DatabaseService } from '../../common/database/database.service';
import { appState } from '../../database/schema';

@Injectable()
export class StateRepository {
  constructor(private readonly database: DatabaseService) {}

  async get(ownerId: string, key: string): Promise<unknown> {
    const [row] = await this.database.db
      .select({ value: appState.value })
      .from(appState)
      .where(and(eq(appState.ownerId, ownerId), eq(appState.key, key)))
      .limit(1);
    return row ? row.value : null;
  }

  async upsert(ownerId: string, key: string, value: unknown): Promise<void> {
    await this.database.db
      .insert(appState)
      .values({ ownerId, key, value, updatedAt: new Date() })
      .onConflictDoUpdate({
        target: [appState.ownerId, appState.key],
        set: { value, updatedAt: new Date() },
      });
  }
}
