import 'package:dartz/dartz.dart';
import '../../../services/user_service.dart';
import '../../../core/errors/failures.dart';
import '../base_usecase.dart';

/// 사용자 삭제 파라미터
class DeleteUserParams {
  final int id;

  const DeleteUserParams({
    required this.id,
  });
}

/// 사용자 삭제 UseCase
class DeleteUserUseCase extends UseCase<void, DeleteUserParams> {
  final UserService _userService;

  DeleteUserUseCase(this._userService);

  @override
  Future<Either<Failure, void>> call(DeleteUserParams params) async {
    try {
      // 자기 자신 삭제 방지 로직 필요
      // 실제 구현에서는 현재 로그인한 사용자 ID와 비교
      
      await _userService.deleteUser(params.id);
      return const Right(null);
    } catch (e) {
      if (e.toString().contains('찾을 수 없')) {
        return Left(ValidationFailure(
          message: '사용자를 찾을 수 없습니다.',
          code: 'USER_NOT_FOUND',
          originalError: e,
        ));
      } else if (e.toString().contains('삭제할 수 없')) {
        return Left(ValidationFailure(
          message: '해당 사용자는 삭제할 수 없습니다.',
          code: 'CANNOT_DELETE',
          originalError: e,
        ));
      } else if (e.toString().contains('권한')) {
        return Left(PermissionFailure(
          message: '사용자를 삭제할 권한이 없습니다.',
          code: 'PERMISSION_DENIED',
          originalError: e,
        ));
      } else {
        return Left(ServerFailure(
          message: '사용자 삭제 중 오류가 발생했습니다.',
          originalError: e,
        ));
      }
    }
  }
}