#ifndef DESCSS_DetectorConstruction_h
#define DESCSS_DetectorConstruction_h

#include "G4VUserDetectorConstruction.hh"
#include "globals.hh"

class G4VPhysicalVolume;
class G4LogicalVolume;
class G4HumanPhantomMaterial;
class G4HumanPhantomMessenger;

class DetectorConstruction : public G4VUserDetectorConstruction {
public:
    DetectorConstruction();
    ~DetectorConstruction() override;

    G4VPhysicalVolume* Construct() override;

public:
    void SetBodyPartSensitivity(G4String, G4bool);
    void SetPhantomSex(G4String);
    void SetPhantomModel(G4String);
    void ConstructSDandField();

private:
    void ConstructSectionSphere(G4LogicalVolume* fMotherLogical, G4double zBias);
    void ConstructSectionCons(G4String name, G4LogicalVolume* fMotherLogical, G4double zBias, G4double pRmax1,
                              G4double pRmin1, G4double pRmax2, G4double pRmin2, G4double hz);
    void ConstructSectionSmall(G4LogicalVolume* fMotherLogical, G4double zBias);
    void ConstructSectionBig(G4LogicalVolume* fMotherLogical, G4double zBias);
    void ConstructHumanPhantom(G4VPhysicalVolume* fMotherPhysics);

private:
    G4String sex = "Male";
    G4String model = "MIRD";
    std::map<std::string, G4bool> sensitivities;
    G4HumanPhantomMaterial* material;
    G4HumanPhantomMessenger* messenger;
};

#endif
