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

/// 회사 상세 조회 파라미터
class GetCompanyDetailParams {
  final int id;
  final bool includeBranches;

  const GetCompanyDetailParams({
    required this.id,
    this.includeBranches = false,
  });
}

/// 회사 상세 조회 UseCase
class GetCompanyDetailUseCase extends UseCase<Company, GetCompanyDetailParams> {
  // 레포지토리 기반으로 마이그레이션
  final CompanyRepository _companyRepository;

  GetCompanyDetailUseCase(this._companyRepository);

  @override
  Future<Either<Failure, Company>> call(GetCompanyDetailParams params) async {
    try {
      // 레포지토리에서 상세 조회(자식 포함 형태로 매핑됨)
      final result = await _companyRepository.getCompanyById(params.id);
      return result;
    } on ServerFailure catch (e) {
      if (e.message.contains('not found')) {
        return Left(ValidationFailure(
          message: '회사를 찾을 수 없습니다.',
          code: 'NOT_FOUND',
          originalError: e,
        ));
      }
      return Left(ServerFailure(
        message: e.message,
        originalError: e,
      ));
    } catch (e) {
      return Left(UnknownFailure(
        message: '회사 정보를 불러오는 중 오류가 발생했습니다.',
        originalError: e,
      ));
    }
  }
}
