import 'package:fis_common/index.dart';
import 'package:fis_jsonrpc/rpc.dart';
import 'package:vitalapp/managers/interfaces/service_pack.dart';
import 'package:vitalapp/rpc.dart';
import 'package:fis_common/logger/logger.dart';
import 'package:vitalapp/store/store.dart';
import 'package:fis_common/index.dart';

class ServicePackManager implements IServicePackManager {
  @override
  Future<PageCollection<ServicePackDTO>?> getServicePackList(
      ServicePackPageRequest request) async {
    try {
      request.token = Store.user.token;
      final result =
          await rpc.vitalServicePack.getServicePackPageAsync(request);
      return result;
    } catch (e) {
      logger.e("getServicePackPageAsync query patient paged list error.", e);
      return null;
    }
  }

  @override
  Future<PageCollection<ServiceItemDTO>?> getServiceItemList(
      GetServiceItemPageRequest request) async {
    try {
      request.token = Store.user.token;
      final result =
          await rpc.vitalServicePack.getServiceItemPageAsync(request);
      print(result);
      return result;
    } catch (e) {
      logger.e("getServiceItemList query patient paged list error.", e);
      return null;
    }
  }

  @override
  Future<ContractRecordDTO?> getDoctorContractRecord() async {
    ContractRecordDTO? result;
    try {
      result = await rpc.vitalContractRecord
          .getDoctorContractRecordAsync(GetDoctorContractRecordRequest(
        token: Store.user.token,
      ));
    } catch (e) {
      logger.e("ServicePackManager getDoctorContractRecord ex:", e);
    }
    if (result == null) {
      result = ContractRecordDTO();
    } else {
      logger.i(
          "ServicePackManager getDoctorContractRecord:${result.contractedDoctorName ?? ''} ${result.contractedDoctorPhone ?? ''} ${result.teamLeaderName ?? ''} ${result.preceptorName ?? ''}");
    }
    if (result.contractedDoctorName?.isNullOrEmpty ?? true) {
      result.contractedDoctorName = Store.user.displayName;
    }
    if (result.contractedDoctorPhone?.isNullOrEmpty ?? true) {
      result.contractedDoctorPhone = Store.user.phone;
    }
    if (result.teamLeaderName?.isNullOrEmpty ?? true) {
      result.teamLeaderName = Store.user.principalName;
    }
    if (result.preceptorName?.isNullOrEmpty ?? true) {
      result.preceptorName = Store.user.principalName;
    }
    return result;
  }
}