import 'package:dartz/dartz.dart';
import '../../../services/user_service.dart';
import '../../../models/user_model.dart' as model;
import '../../../core/errors/failures.dart';
import '../base_usecase.dart';

/// 사용자 상세 조회 파라미터
class GetUserDetailParams {
  final int id;

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

/// 사용자 상세 조회 UseCase
class GetUserDetailUseCase extends UseCase<model.User, GetUserDetailParams> {
  final UserService _userService;

  GetUserDetailUseCase(this._userService);

  @override
  Future<Either<Failure, model.User>> call(GetUserDetailParams params) async {
    try {
      final user = await _userService.getUser(params.id);
      return Right(user);
    } catch (e) {
      if (e.toString().contains('찾을 수 없')) {
        return Left(ValidationFailure(
          message: '사용자를 찾을 수 없습니다.',
          code: 'USER_NOT_FOUND',
          originalError: e,
        ));
      } else if (e.toString().contains('권한')) {
        return Left(PermissionFailure(
          message: '사용자 정보를 조회할 권한이 없습니다.',
          code: 'PERMISSION_DENIED',
          originalError: e,
        ));
      } else {
        return Left(ServerFailure(
          message: '사용자 정보를 불러오는 중 오류가 발생했습니다.',
          originalError: e,
        ));
      }
    }
  }
}