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 ToggleUserStatusParams {
  final int id;

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

/// 사용자 활성화/비활성화 UseCase
class ToggleUserStatusUseCase extends UseCase<model.User, ToggleUserStatusParams> {
  final UserService _userService;

  ToggleUserStatusUseCase(this._userService);

  @override
  Future<Either<Failure, model.User>> call(ToggleUserStatusParams params) async {
    try {
      // 자기 자신 비활성화 방지
      // 실제 구현에서는 현재 로그인한 사용자 ID와 비교
      
      final user = await _userService.toggleUserStatus(params.id);
      return Right(user);
    } catch (e) {
      if (e.toString().contains('자신')) {
        return Left(ValidationFailure(
          message: '자기 자신은 비활성화할 수 없습니다.',
          code: 'CANNOT_DEACTIVATE_SELF',
          originalError: e,
        ));
      } else 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,
        ));
      }
    }
  }
}