/**
 * This module was automatically generated by `ts-interface-builder`
 */
import * as t from "ts-interface-checker";
// tslint:disable:object-literal-key-quotes

export const NavigationTypes = t.enumtype({
  "App": "app",
  "Identify": "identify",
  "Media": "media",
  "NudgeResponse": "nudge_response",
  "Page": "page",
  "Rate": "rate",
  "Search": "search",
  "ModuleSelection": "module_selection",
});

export const CoreCatalogType = t.enumtype({
  "User": "user",
  "Site": "site",
  "Media": "media",
  "Other": "other",
});

export const ContentBlock = t.enumtype({
  "Core": "core",
  "ELearning": "e-learning",
  "ECommerce": "e-commerce",
  "Payment": "payment",
  "Loyalty": "loyalty",
  "PatientMgmt": "patient_mgmt",
  "CallCenter": "call_center",
  "EmergencyMgmt": "emergency_mgmt",
});

export const ModuleType = t.enumtype({
  "Core": "core",
  "ECommerce": "e_commerce",
  "ELearning": "e_learning",
  "Screening": "screening",
  "Assessment": "assessment",
  "Enrolment": "enrolment",
  "MedicalReview": "medical_review",
  "MyPatients": "my_patients",
  "Appointments": "appointments",
  "Prescription": "prescription",
  "LifestyleMgmt": "lifestyle_mgmt",
  "PsychologicalMgmt": "psychological_mgmt",
  "CounselingMgmt": "counseling_mgmt",
  "Investigation": "investigation",
  "TreatmentPlan": "treatment_plan",
  "Transfers": "transfers",
  "HCWMgmt": "hcw_mgmt",
  "Break": "break",
  "CallerHistory": "caller_history",
  "AttendCall": "attend_call",
  "Single": "single",
  "Dashboard": "dashboard",
  "Map": "map",
  "Other": "other",
});

export const SearchModuleType = t.name("ModuleType");

export const AppAction = t.enumtype({
  "Background": "background",
  "Close": "close",
  "Open": "open",
  "Resume": "resume",
});

export const IdentityAction = t.enumtype({
  "Login": "login",
  "Logout": "logout",
  "Register": "register",
  "Blocked": "blocked",
  "UnBlocked": "unblocked",
});

export const MediaAction = t.enumtype({
  "View": "view",
  "Impression": "impression",
  "Play": "play",
  "Pause": "pause",
  "Seek": "seek",
  "Finish": "finish",
});

export const MembersCount = t.enumtype({
  "None": "none",
  "One": "1",
  "Two": "2",
  "Three": "3",
  "Four": "4",
  "FiveOrMore": "5_or_more",
  "Undisclosed": "undisclosed",
});

export const UserGender = t.enumtype({
  "Male": "male",
  "Female": "female",
  "Other": "other",
  "UnDisclosed": "undisclosed",
});

export const SearchItemType = t.enumtype({
  "PatientRecord": "patient_record",
  "LifestylePlanItem": "lifestyle_plan_item",
  "TreatmentPlanItem": "treatment_plan_item",
  "PsychologicalPlanItem": "psychological_plan_item",
  "CounselingPlanItem": "counseling_plan_item",
  "InvestigationTestItem": "investigation_test_item",
  "Blood": "blood",
  "Oxygen": "oxygen",
  "Drug": "drug",
  "Grocery": "grocery",
  "Facility": "facility",
  "MedicalEquipment": "medical_equipment",
  "Subscription": "subscription",
  "Electronics": "electronics",
  "Clothing": "clothing",
  "Book": "book",
  "ItemVerification": "item_verification",
  "ItemReport": "item_report",
  "Reward": "reward",
  "Survey": "survey",
  "Incident": "incident",
  "Address": "address",
  "Ambulance": "ambulance",
  "OtherVehicle": "other_vehicle",
  "Contact": "contact",
  "Call": "call",
  "Email": "email",
  "SMS": "sms",
  "Other": "other",
});

export const MaritalStatus = t.enumtype({
  "Single": "single",
  "Married": "married",
  "Widowed": "widowed",
  "Divorced": "divorced",
  "Separated": "separated",
  "Other": "other",
  "UnDisclosed": "undisclosed",
});

export const AppProperties = t.iface([], {
  "action": "AppAction",
  "start_time": "number",
});

export const IdentifyProperties = t.iface([], {
  "action": "IdentityAction",
  "referral_code": t.opt("string"),
  "blocked": t.opt("IdentifyBlockObject"),
});

export const IdentifyBlockObject = t.iface([], {
  "reason": "string",
  "remarks": t.opt("string"),
});

export const UserInfo = t.iface(["IdentifyProperties"], {
  "user_props": "UserCatalog",
});

export const ImageProperties = t.iface([], {
  "contentBlock": t.opt("ContentBlock"),
  "type": "MediaType",
  "id": "string",
  "action": "MediaAction",
  "time": "number",
  "meta": t.opt("any"),
});

export const MediaType = t.enumtype({
  "Audio": "audio",
  "Video": "video",
  "Image": "image",
});

export const AudioVideoProperties = t.iface([], {
  "contentBlock": t.opt("ContentBlock"),
  "type": "MediaType",
  "id": "string",
  "action": "MediaAction",
  "time": "number",
  "meta": t.opt("any"),
});

export const MediaProperties = t.union("ImageProperties", "AudioVideoProperties");

export const MediaCatalog = t.iface([], {
  "id": "string",
  "type": "MediaType",
  "name": t.opt("string"),
  "length": "string",
  "description": t.opt("string"),
  "resolution": t.opt("string"),
  "language": t.opt("Language"),
});

export const PageProperties = t.iface([], {
  "path": "string",
  "title": t.opt("string"),
  "duration": t.opt("number"),
  "render_time": "number",
  "meta": t.opt("any"),
});

export const NudgeAction = t.enumtype({
  "Shown": "shown",
  "Error": "error",
  "Block": "block",
  "Discard": "discard",
  "Open": "open",
  "Expired": "expired",
});

export const NudgeResponseType = t.enumtype({
  "Push": "push_notification",
  "InApp": "in_app_message",
});

export const NudgeResponseProperties = t.iface([], {
  "ref": "string",
  "response": "string",
  "time": "string",
  "details": t.opt("string"),
});

export const SiteCatalogType = t.enumtype({
  "Pharmacy": "pharmacy",
  "Clinic": "clinic",
  "Community": "community",
});

export const SearchProperties = t.iface([], {
  "query": "string",
  "module": "ModuleType",
  "results_list": t.array("ItemMinObject"),
  "filter": t.opt("SearchFilter"),
  "page": "number",
  "meta": t.opt("any"),
});

export const ItemMinObject = t.iface([], {
  "id": "string",
  "type": t.union("SearchItemType", "ItemType"),
});

export const EducationalLevel = t.enumtype({
  "Primary": "primary",
  "LowerSecondary": "lower_secondary",
  "UpperSecondary": "upper_secondary",
  "NonTertiary": "non_tertiary",
  "Tertiary": "tertiary",
  "Bachelors": "bachelors",
  "Masters": "masters",
  "Doctorate": "doctorate",
});

export const UserAccountType = t.enumtype({
  "Basic": "basic",
  "Classic": "classic",
  "Advanced": "advanced",
  "Other": "other",
});

export const UserCatalog = t.iface([], {
  "id": "string",
  "name": t.opt("string"),
  "organization_id": t.opt("string"),
  "organization_name": t.opt("string"),
  "experience": t.opt("string"),
  "region_state": t.opt("string"),
  "city": t.opt("string"),
  "workplace": t.opt("string"),
  "profession": t.opt("string"),
  "zipcode": t.opt("string"),
  "timezone": t.opt("string"),
  "country": t.opt("Country"),
  "language": t.opt("Language"),
  "education_level": t.opt("EducationalLevel"),
  "account_type": t.opt("UserAccountType"),
  "birth_year": t.opt("number"),
  "gender": t.opt("UserGender"),
  "marital_status": t.opt("MaritalStatus"),
  "family_members": t.opt("MembersCount"),
  "children_under_five": t.opt("MembersCount"),
  "referral_code": t.opt("string"),
});

export const SiteCatalog = t.iface([], {
  "id": "string",
  "name": "string",
  "type": "SiteCatalogType",
  "country": t.opt("Country"),
  "region_state": t.opt("string"),
  "city": t.opt("string"),
  "street_address": t.opt("string"),
  "zipcode": t.opt("string"),
  "level": t.opt("string"),
  "is_active": t.opt("boolean"),
  "latitude": t.opt("number"),
  "longitude": t.opt("number"),
  "culture": t.opt("string"),
  "parent_id": t.opt("string"),
  "service_list": t.opt(t.array("string")),
  "sub_type": t.opt("string"),
  "priority": t.opt("string"),
  "is_private": t.opt("boolean"),
  "district": t.opt("string"),
  "sub_district": t.opt("string"),
  "landmark": t.opt("string"),
  "attributes": t.opt("SiteAttributes"),
});

export const SiteAttributes = t.iface([], {
  "bed_number": t.opt("number"),
  "insurance_plan_lst": t.opt(t.array("string")),
});

export const RateType = t.enumtype({
  "App": "app",
  "Exam": "exam",
  "Question": "question",
  "Module": "module",
  "Process": "process",
  "Form": "form",
  "Section": "section",
  "Media": "media",
  "Order": "order",
  "Item": "item",
  "HCW": "hcw",
  "HcwSite": "hcw_site",
  "Facility": "facility",
  "Assessment": "assessment",
  "Customer": "customer",
  "Other": "other",
});

export const RateProperties = t.iface([], {
  "rate_value": "number",
  "type": "RateType",
  "subject_id": "string",
  "meta": t.opt("any"),
});

export const ModuleSelectionProperties = t.iface([], {
  "type": "ModuleType",
  "meta": t.opt("any"),
});

const exportedTypeSuite: t.ITypeSuite = {
  NavigationTypes,
  CoreCatalogType,
  ContentBlock,
  ModuleType,
  SearchModuleType,
  AppAction,
  IdentityAction,
  MediaAction,
  MembersCount,
  UserGender,
  SearchItemType,
  MaritalStatus,
  AppProperties,
  IdentifyProperties,
  IdentifyBlockObject,
  UserInfo,
  ImageProperties,
  MediaType,
  AudioVideoProperties,
  MediaProperties,
  MediaCatalog,
  PageProperties,
  NudgeAction,
  NudgeResponseType,
  NudgeResponseProperties,
  SiteCatalogType,
  SearchProperties,
  ItemMinObject,
  EducationalLevel,
  UserAccountType,
  UserCatalog,
  SiteCatalog,
  SiteAttributes,
  RateType,
  RateProperties,
  ModuleSelectionProperties,
};
export default exportedTypeSuite;
