{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fabricator API"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Using the API library"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from api import BigApi\n",
    "\n",
    "# Initialize the API with the .env file\n",
    "BigApi.init(\".test.env\")\n",
    "BigApi.adminLogin()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from enum import Enum\n",
    "schemas = BigApi.adminGet(\"/admin/fabricator/schemas\")\n",
    "print(schemas)\n",
    "JobStates = Enum(\"JobStates\", dict([(v, int(k)) for k, v in schemas[\"JobStates\"].items()]))\n",
    "JobActions = Enum(\"JobActions\", dict([(v, int(k)) for k, v in schemas[\"JobActions\"].items()]))\n",
    "ScanRequestStates = Enum(\"ScanRequestStates\", dict([(v, int(k)) for k, v in schemas[\"ScanRequestStates\"].items()]))\n",
    "JobActions, JobStates, ScanRequestStates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "payload = {\n",
    "    \"email\": 'qa+fabricator24@bigscreenvr.com',\n",
    "    \"firstName\": \"David\",\n",
    "    \"lastName\": \"Fabricator\",\n",
    "    \"name\": \"this is a test order\"\n",
    "}\n",
    "\n",
    "data = BigApi.adminPost(\"/admin/shop/test_order\", payload)\n",
    "bigOrderId = data[\"id\"]\n",
    "\n",
    "data = BigApi.adminGet(f\"/admin/shop/order/{bigOrderId}\")\n",
    "\n",
    "BigApi.adminGet(f\"/admin/shop/order/{bigOrderId}/checklist\")\n",
    "data = BigApi.adminPut(f\"/admin/shop/order/{bigOrderId}\", {\"action\": \"SendScanRequest\"})\n",
    "scanRequestId = data[\"scanRequestId\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Get the scan request\n",
    "data = BigApi.adminGet(f\"/admin/fabricator/scan_request/{scanRequestId}\")\n",
    "\n",
    "# Force topology update for the scan request\n",
    "data = BigApi.adminGet(f\"/admin/fabricator/scan_request/{scanRequestId}/topology/52308\")\n",
    "\n",
    "# Verify the scan request\n",
    "data = BigApi.adminGet(f\"/admin/fabricator/scan_request/{scanRequestId}/verify\")\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "jobId = \"Pu8GJoQhTnDDG1cR\"\n",
    "#data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", {\"action\": JobActions.TryScanVerification.value})\n",
    "#data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", {\"action\": JobActions.TryToolPathCreation.value})\n",
    "#data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", {\"action\": JobActions.ToolPathCreationSuccess.value})\n",
    "#data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", {\"action\": JobActions.TryManufacturing.value})\n",
    "#data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", {\"action\": JobActions.ManufacturingSucceeded.value})\n",
    "data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", {\"action\": JobActions.NFCFailed.value})\n",
    "\n",
    "data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", {\"action\": JobActions.TryNFC.value, \"nfcTagId\": \"1234567892\"})\n",
    "data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", {\"action\": JobActions.TryQA.value})\n",
    "data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", {\"action\": JobActions.QASuccess.value})\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Query via a job state\n",
    "query = {\n",
    "    \"jobState\": JobStates.AwaitingScanVerification.value\n",
    "}\n",
    "\n",
    "# Get the first 5 jobs, ordered by creation data from newest to oldest\n",
    "data = BigApi.adminPost(\"/admin/fabricator/jobs?limit=5\", query)\n",
    "[job[\"createdAt\"] for job in data[\"jobs\"]]\n",
    "\n",
    "# Reverse the order - ordered by creation data from oldest to newest.\n",
    "data = BigApi.adminPost(\"/admin/fabricator/jobs?limit=5&order=asc\", query)\n",
    "[job[\"createdAt\"] for job in data[\"jobs\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# If a job is in the AwaitingScanVerification it can be failed by the admin with this action:\n",
    "payload = { \"action\": JobActions.VisualInspectionFailed.value }\n",
    "data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", payload)\n",
    "\n",
    "job = BigApi.adminGet(f\"/admin/fabricator/job/{jobId}\")\n",
    "assert job[\"jobState\"] == JobStates.ScanVerificationFailed.value, f\"job state should be {JobStates.ScanVerificationFailed.value} (actual: {job['jobState']})\"\n",
    "\n",
    "payload = { \"action\": JobActions.ExternalPreprocessorFailed.value }\n",
    "data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", payload)\n",
    "\n",
    "job = BigApi.adminGet(f\"/admin/fabricator/job/{jobId}\")\n",
    "assert job[\"jobState\"] == JobStates.ScanVerificationFailed.value, f\"job state should be {JobStates.ScanVerificationFailed.value} (actual: {job['jobState']})\"\n",
    "\n",
    "# This failure state can be reset\n",
    "payload = { \"action\": JobActions.ResetFailedScanVerification.value }\n",
    "data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", payload)\n",
    "\n",
    "# Note that the new job state will be AwaitingScanVerification\n",
    "job = BigApi.adminGet(f\"/admin/fabricator/job/{jobId}\")\n",
    "assert job[\"jobState\"] == JobStates.AwaitingScanVerification.value, f\"job state should be {JobStates.AwaitingScanVerification.value} (actual: {job['jobState']})\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "payload = { \n",
    "    \"action\": JobActions.AddMessage.value, \n",
    "    \"message\": \"hello world\",\n",
    "    \"metaData\": {\n",
    "        \"machineId\": \"python_notebook\",\n",
    "    }\n",
    "}\n",
    "data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", payload)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "jobId = \"S72NpeeDEgd-Ptov5ETK2RsQpNY\"\n",
    "payload = { \"action\": JobActions.TryNFC.value, \"metaData\": {\n",
    "            \"machineId\": \"whatever\",\n",
    "        } }\n",
    "data = BigApi.adminPut(f\"/admin/fabricator/job/{jobId}\", payload)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
