import { DataSource } from 'typeorm';
import { UserEntity } from '../../../entities';
import { UpdateUserCommand } from '../../types';
import {
  applyUpdates,
  boolToInt,
  jsonOrNull,
  TransformMap
} from './utils/applyUpdates';

const USER_TRANSFORMS: TransformMap = {
  isOnline: boolToInt,
  isAdmin: boolToInt,
  isRoomOwner: boolToInt,
  voiceState: jsonOrNull,
  screenShareState: jsonOrNull
};

export async function handleUpdateUser(command: UpdateUserCommand, dataSource: DataSource): Promise<void> {
  const repo = dataSource.getRepository(UserEntity);
  const { userId, updates } = command.payload;
  const existing = await repo.findOne({ where: { id: userId } });

  if (!existing)
    return;

  applyUpdates(existing, updates, USER_TRANSFORMS);
  await repo.save(existing);
}

