package uk.nhs.careconnect.ri.database.daointerface;

import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.rest.annotation.ConditionalUrlParam;
import ca.uhn.fhir.rest.annotation.IdParam;
import ca.uhn.fhir.rest.annotation.OptionalParam;
import ca.uhn.fhir.rest.param.StringParam;
import ca.uhn.fhir.rest.param.TokenParam;
import org.hl7.fhir.dstu3.model.IdType;
import org.hl7.fhir.dstu3.model.Medication;
import org.hl7.fhir.dstu3.model.MedicationDispense;
import org.hl7.fhir.dstu3.model.MedicationRequest;
import uk.nhs.careconnect.fhir.OperationOutcomeException;
import uk.nhs.careconnect.ri.database.entity.medicationRequest.MedicationEntity;

import java.util.List;

public interface MedicationRepository extends BaseRepository<MedicationEntity, Medication> {

    Medication read(FhirContext ctx, IdType theId);

    MedicationEntity readEntity(FhirContext ctx, IdType theId);

    Medication create(FhirContext ctx, Medication medication, @IdParam IdType theId, @ConditionalUrlParam String theConditional) throws OperationOutcomeException;

    MedicationEntity createEntity(FhirContext ctx, Medication medication, @IdParam IdType theId, @ConditionalUrlParam String theConditional) throws OperationOutcomeException;

    List<Medication> search(FhirContext ctx
            , @OptionalParam(name = Medication.SP_CODE) TokenParam code
            ,@OptionalParam(name= Medication.SP_RES_ID) StringParam id

    );

    List<MedicationEntity> searchEntity(FhirContext ctx
            , @OptionalParam(name = Medication.SP_CODE) TokenParam code
            ,@OptionalParam(name= Medication.SP_RES_ID) StringParam id

    );
}