import { SignupForm } from "@models/Signup";
import {
  signupFormQuestionToQuestion, buildFormSchema, buildValidationSchema, buildUISchema,
} from "./FormUtils";

const signupForm: SignupForm = {
  id: 250,
  title_fi: "Potentiaalin Tasaus 100 ilmoittautuminen - deviversio",
  title_en: "Pota100 dev",
  visible: true,
  isOpen: true,
  start_time: "2021-08-17T16:45:15+03:00",
  end_time: "2021-09-30T23:59:59+03:00",
  email_content: "Hei, \r\n\r\nIlmoittautumisesi on saapunut perille!\r\n\r\nMaksutiedot lähetetään sinulle vasta kun ilmoittautuminen on sulkeutunut. \r\n\r\nJos ilmoittautumisessa ilmenee ongelmia tai pääjuhlasta nousee kysymyksiä, olethan yhetydessä Potentiaalin Tasaus 100 pääjuhlavastaaviin:\r\n\r\nEmmaleena Ahonen ja Jonna Tammikivi  \r\npota@sik100.fi\r\n\r\nPS. Jos tulet juhlaan avecin kanssa, muista, että hänen tulee myös ilmoittautua juhlaan erikseen!\r\n\r\nPoTassa nähdään!",
  questions: [
    {
      id: "yigh6mhd4",
      title_fi: "Ilmoittautuminen",
      title_en: "EN-Ilmoittautuminen",
      type: "info",
      description_fi: "Tämä ilmoittautuminen kustantaa 120€ opiskelijoille ja 180€ alumneille. Ilmoittautuminen on sitova.",
      description_en: "EN - Tämä ilmoittautuminen kustantaa 120€ opiskelijoille ja 180€ alumneille. Ilmoittautuminen on sitova.",
    },
    {
      id: "WRflgsBe_",
      title_fi: "Nimi",
      title_en: "Name",
      type: "name",
      required: true,
    },
    {
      id: "OF55WBbOx",
      title_fi: "Sähköposti",
      title_en: "Email",
      type: "email",
      required: true,
    },
    {
      id: "ZY5UpArqx",
      title_fi: "Olen ",
      title_en: "I am ",
      type: "radiobutton",
      options: {
        enum: [
          "Killan jäsen",
          "Killan alumni",
          "Jäsenen avec",
          "Alumnin avec",
        ],
        enumNames_fi: [
          "Killan jäsen",
          "Killan alumni",
          "Jäsenen avec",
          "Alumnin avec",
        ],
        enumNames_en: [
          "Member",
          "Alumni",
          "Member avec",
          "Alumni avec",
        ],
      },
      required: true,
    },
    {
      id: "dUzh31kag",
      title_fi: "Fuksivuosi (yyyy)",
      title_en: "Freshman year (yyyy)",
      type: "text",
    },
    {
      id: "1LaFnZ-Of",
      title_fi: "Erikoisruokavaliot / Allergiat",
      title_en: "Allergies",
      type: "text",
    },
    {
      id: "PajprpSLa",
      title_fi: "Liha ja kala menuvaihtoehto tarkoittaa sitä että menuun kuuluu molempia alku- tai pääruokana.",
      title_en: "EN - Liha ja kala menuvaihtoehto tarkoittaa sitä että menuun kuuluu molempia alku- tai pääruokana.",
      type: "info",
      description_fi: "Huomioimme allergiat menuvalinnan lisäksi. Esimerkiksi jos on allerginen kalalle tämä otetaan huomioon jos on valinnut \"liha ja kala\" vaihtoehdon.",
      description_en: "EN - Huomioimme allergiat menuvalinnan lisäksi. Esimerkiksi jos on allerginen kalalle tämä otetaan huomioon jos on valinnut \"liha ja kala\" vaihtoehdon.",
    },
    {
      id: "0GMtDu46R",
      title_fi: "Pääjuhlan ruokatarjoilut",
      title_en: "EN - Pääjuhlan ruokatarjoilut",
      type: "radiobutton",

      options: {
        enum: [
          "Vegaaninen",
          "Liha ja Kala",
        ],
        enumNames_fi: [
          "Vegaaninen",
          "Liha ja Kala",
        ],
        enumNames_en: [
          "Vegan",
          "Meat and fish",
        ],
      },
      required: true,
    },
    {
      id: "MMghazOPT",
      title_fi: "Pääjuhlan juomatarjoilut",
      title_en: "EN - Pääjuhlan juomatarjoilut",
      type: "radiobutton",
      options: {
        enum: [
          "Alkoholillinen",
          "Alkoholiton",
        ],
        enumNames_fi: [
          "Alkoholillinen",
          "Alkoholiton",
        ],
        enumNames_en: [
          "Alcoholic",
          "Alcohol free",
        ],
      },
      required: true,
    },
    {
      id: "fCYJxDSrL",
      title_fi: "Haluan tilata pöytään pullon viiniä tai kuohuvaa",
      title_en: "EN - Haluan tilata pöytään pullon viiniä tai kuohuvaa",
      type: "checkbox",
      options: {
        enum: [
          "Punaviini (42€)",
          "Valkoviini (42€)",
          "Kuohuviini (42€)",
          "Shamppanja (68€)",
        ],
        enumNames_fi: [
          "Punaviini (42€)",
          "Valkoviini (42€)",
          "Kuohuviini (42€)",
          "Shamppanja (68€)",
        ],
        enumNames_en: [
          "Red wine (42€)",
          "White wine (42€)",
          "Sparkling wine (42€)",
          "Champagne (68€)",
        ],
      },
    },
    {
      id: "0q74weKci",
      title_fi: "Avec",
      title_en: "Avec",
      type: "text",
    },
    {
      id: "kqPI12VK_",
      title_fi: "Pöytäseurue",
      title_en: "EN - Pöytäseurue",
      type: "text",
    },
    {
      id: "ofKH9GhFg",
      title_fi: "Annan lahjan lahjanantotilaisuudessa",
      title_en: "EN - Annan lahjan lahjanantotilaisuudessa",
      type: "radiobutton",
      options: {
        enum: [
          "Kyllä",
          "Ei",
        ],
        enumNames_fi: [
          "Kyllä",
          "Ei",
        ],
        enumNames_en: [
          "Yes",
          "No",
        ],
      },
      required: true,
    },
    {
      id: "AsYHmSz2V",
      title_fi: "Jos annat lahjan, mitä tahoa edustat?",
      title_en: "EN - Jos annat lahjan, mitä tahoa edustat?",
      type: "text",
    },
    {
      id: "hA3b8X6P4",
      title_fi: "Haluan osallistua jatkoille",
      title_en: "EN - Haluan osallistua jatkoille",
      type: "radiobutton",
      options: {
        enum: [
          "Kyllä",
          "Ei",
        ],
        enumNames_fi: [
          "Kyllä",
          "Ei",
        ],
        enumNames_en: [
          "Yes",
          "No",
        ],
      },
      required: true,
    },
    {
      id: "rf34jMWSe",
      title_fi: "Sillikselle on rajattu määrä paikkoja, jolloin emme voi varmistaa kaikille pääsyä.",
      title_en: "EN - Sillikselle on rajattu määrä paikkoja, jolloin emme voi varmistaa kaikille pääsyä.",
      type: "info",
      description_fi: "Ilmoitamme sähköpostilla siinä tapauksessa jos olet jonossa tai et maahtunut silliksen kiintiöön. ",
      description_en: "EN - Ilmoitamme sähköpostilla siinä tapauksessa jos olet jonossa tai et maahtunut silliksen kiintiöön. ",
    },
    {
      id: "PnzuTUxZH",
      title_fi: "Haluan osallistua sillikselle seuraavana päivänä (25€)",
      title_en: "EN - Haluan osallistua sillikselle seuraavana päivänä (25€)",
      type: "radiobutton",
      options: {
        enum: [
          "Kyllä",
          "Ei",
        ],
        enumNames_fi: [
          "Kyllä",
          "Ei",
        ],
        enumNames_en: [
          "Yes",
          "No",
        ],
      },
      required: true,
    },
    {
      id: "aM8Xjhsqs",
      title_fi: "Haluan kuulla lisää SIK100-historiateoksesta ja mahdollisuudesta ostaa teoksen",
      title_en: "EN - Haluan kuulla lisää SIK100-historiateoksesta ja mahdollisuudesta ostaa teoksen",
      type: "radiobutton",
      options: {
        enum: [
          "Kyllä",
          "Ei",
        ],
        enumNames_fi: [
          "Kyllä",
          "Ei",
        ],
        enumNames_en: [
          "Yes",
          "No",
        ],
      },
      required: true,
    },
    {
      id: "m2aKUikfI",
      title_fi: "Vapaaehtoinen kannatusmaksu",
      title_en: "EN - Vapaaehtoinen kannatusmaksu",
      type: "checkbox",
      options: {
        enum: [
          "15€",
          "25€",
          "50€",
        ],
        enumNames_fi: [
          "15€",
          "25€",
          "50€",
        ],
        enumNames_en: [
          "15€",
          "25€",
          "50€",
        ],
      },
    },
    {
      id: "13qShsW03",
      title_fi: "Haluan saada sähköpostiini lisää tietoa SIK100-vuodesta",
      title_en: "EN - Haluan saada sähköpostiini lisää tietoa SIK100-vuodesta",
      type: "radiobutton",
      options: {
        enum: [
          "Kyllä",
          "Ei",
        ],
        enumNames_fi: [
          "Kyllä",
          "Ei",
        ],
        enumNames_en: [
          "Yes",
          "No",
        ],
      },
      required: true,
    },
    {
      id: "xI_OlVAxM",
      title_fi: "Terveisiä killalle",
      title_en: "EN - Terveisiä killalle",
      type: "text",
    },
    {
      id: "04FkeTQZm",
      title_fi: "Paras vuosijuhlamuisto",
      title_en: "EN - Paras vuosijuhlamuisto",
      type: "text",
    },
  ],
  schema: {
    type: "object",
    required: [
      "WRflgsBe_",
      "OF55WBbOx",
      "ZY5UpArqx",
      "0GMtDu46R",
      "MMghazOPT",
      "ofKH9GhFg",
      "hA3b8X6P4",
      "PnzuTUxZH",
      "aM8Xjhsqs",
      "13qShsW03",
    ],
    properties: {
      "04FkeTQZm": {
        type: "string",
        title: "Paras vuosijuhlamuisto",
      },
      "0GMtDu46R": {
        enum: [
          "Vegaaninen",
          "Liha ja Kala",
        ],
        type: "string",
        title: "Pääjuhlan ruokatarjoilut",
        pattern: "^Vegaaninen$|^Liha ja Kala$",
      },
      "0q74weKci": {
        type: "string",
        title: "Avec",
      },
      "13qShsW03": {
        enum: [
          "Kyllä",
          "Ei",
        ],
        type: "string",
        title: "Haluan saada sähköpostiini lisää tietoa SIK100-vuodesta",
        pattern: "^Kyllä$|^Ei$",
      },
      "1LaFnZ-Of": {
        type: "string",
        title: "Erikoisruokavaliot / Allergiat",
      },
      AsYHmSz2V: {
        type: "string",
        title: "Jos annat lahjan, mitä tahoa edustat?",
      },
      MMghazOPT: {
        enum: [
          "Alkoholillinen",
          "Alkoholiton",
        ],
        type: "string",
        title: "Pääjuhlan juomatarjoilut ",
        pattern: "^Alkoholillinen$|^Alkoholiton$",
      },
      OF55WBbOx: {
        type: [
          "string",
        ],
        title: "Sähköposti",
        format: "email",
        default: null,
        pattern: "^[a-zA-Z0-9.!#$%&\\u2019*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$",
      },
      PajprpSLa: {
        type: "null",
        title: "Liha ja kala menuvaihtoehto tarkoittaa sitä että menuun kuuluu molempia alku- tai pääruokana.",
        description: "Huomioimme allergiat menuvalinnan lisäksi. Esimerkiksi jos on allerginen kalalle tämä otetaan huomioon jos on valinnut \"liha ja kala\" vaihtoehdon.",
      },
      PnzuTUxZH: {
        enum: [
          "Kyllä",
          "Ei",
        ],
        type: "string",
        title: "Haluan osallistua sillikselle seuraavana päivänä (25€)",
        pattern: "^Kyllä$|^Ei$",
      },
      WRflgsBe_: {
        type: "string",
        title: "Nimi",
      },
      ZY5UpArqx: {
        enum: [
          "Killan jäsen",
          "Killan alumni",
          "Jäsenen avec",
          "Alumnin avec",
        ],
        type: "string",
        title: "Olen ",
        pattern: "^Killan jäsen$|^Killan alumni$|^Jäsenen avec$|^Alumnin avec$",
      },
      aM8Xjhsqs: {
        enum: [
          "Kyllä",
          "Ei",
        ],
        type: "string",
        title: "Haluan kuulla lisää SIK100-historiateoksesta ja mahdollisuudesta ostaa teoksen",
        pattern: "^Kyllä$|^Ei$",
      },
      dUzh31kag: {
        type: "string",
        title: "Fuksivuosi (yyyy)",
      },
      fCYJxDSrL: {
        type: "array",
        items: {
          enum: [
            "Punaviini (42€)",
            "Valkoviini (42€)",
            "Kuohuviini (42€)",
            "Shamppanja (68€)",
          ],
          type: "string",
          pattern: "^Punaviini \\(42€\\)$|^Valkoviini \\(42€\\)$|^Kuohuviini \\(42€\\)$|^Shamppanja \\(68€\\)$",
        },
        title: "Haluan tilata pöytään pullon viiniä tai kuohuvaa",
        maxItems: 4,
        uniqueItems: true,
      },
      hA3b8X6P4: {
        enum: [
          "Kyllä",
          "Ei",
        ],
        type: "string",
        title: "Haluan osallistua jatkoille",
        pattern: "^Kyllä$|^Ei$",
      },
      kqPI12VK_: {
        type: "string",
        title: "Pöytäseurue",
      },
      m2aKUikfI: {
        type: "array",
        items: {
          enum: [
            "15€",
            "25€",
            "50€",
          ],
          type: "string",
          pattern: "^15€$|^25€$|^50€$",
        },
        title: "Vapaaehtoinen kannatusmaksu",
        maxItems: 3,
        uniqueItems: true,
      },
      ofKH9GhFg: {
        enum: [
          "Kyllä",
          "Ei",
        ],
        type: "string",
        title: "Annan lahjan lahjanantotilaisuudessa",
        pattern: "^Kyllä$|^Ei$",
      },
      rf34jMWSe: {
        type: "null",
        title: "Sillikselle on rajattu määrä paikkoja, jolloin emme voi varmistaa kaikille pääsyä.",
        description: "Ilmoitamme sähköpostilla siinä tapauksessa jos olet jonossa tai et maahtunut silliksen kiintiöön. ",
      },
      xI_OlVAxM: {
        type: "string",
        title: "Terveisiä killalle",
      },
      yigh6mhd4: {
        type: "null",
        title: "Ilmoittautuminen",
        description: "Tämä ilmoittautuminen kustantaa 120€ opiskelijoille ja 180€ alumneille. Ilmoittautuminen on sitova.",
      },
    },
  },
  signups: [
    "asd",
  ],
  quota: 200,
};

const finnishQuestions = signupForm.questions.map((q) => signupFormQuestionToQuestion(q, "fi"));
const englishQuestions = signupForm.questions.map((q) => signupFormQuestionToQuestion(q, "en"));

describe("signupFormQuestionToQuestion", () => {
  it("mathces snapshot in Finnish", () => {
    expect(finnishQuestions).toMatchSnapshot();
  });
  it("mathces snapshot in English", () => {
    expect(englishQuestions).toMatchSnapshot();
  });
});

describe("buildFormSchema", () => {
  it("matches snapshot", () => {
    expect(buildFormSchema(finnishQuestions, signupForm.title_fi)).toMatchSnapshot();
  });
});

describe("buildUISchema", () => {
  it("matches snapshot", () => {
    expect(buildUISchema(finnishQuestions)).toMatchSnapshot();
  });
});

describe("buildValidationSchema", () => {
  it("matches snapshot", () => {
    expect(buildValidationSchema(signupForm.questions)).toMatchSnapshot();
  });
});
