import 'package:dartz/dartz.dart';
import '../../repositories/company_repository.dart';
import '../../../core/errors/failures.dart';
import '../base_usecase.dart';

/// 회사 삭제 파라미터
class DeleteCompanyParams {
  final int id;

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

/// 회사 삭제 UseCase
class DeleteCompanyUseCase extends UseCase<void, DeleteCompanyParams> {
  // 레포지토리 기반으로 마이그레이션
  final CompanyRepository _companyRepository;

  DeleteCompanyUseCase(this._companyRepository);

  @override
  Future<Either<Failure, void>> call(DeleteCompanyParams params) async {
    try {
      final result = await _companyRepository.deleteCompany(params.id);
      return result;
    } on ServerFailure catch (e) {
      if (e.message.contains('associated')) {
        return Left(ValidationFailure(
          message: '연관된 데이터가 있어 삭제할 수 없습니다.',
          originalError: e,
        ));
      }
      return Left(ServerFailure(
        message: e.message,
        originalError: e,
      ));
    } catch (e) {
      return Left(UnknownFailure(
        message: '회사 삭제 중 오류가 발생했습니다.',
        originalError: e,
      ));
    }
  }
}
