import * as yup from "yup";
import { FormChapter, FormStory } from "./types/FormStory";

export const cs =  yup.object<FormChapter>().shape({
	chapterTitle: yup.string().ensure().min(1).trim().required("Chapter title cannot be blank."),
	summary: yup.string().ensure().min(10).required("Summary cannot be blank"),
	notes: yup.string().ensure(),
	bands: yup.array().ensure().of(yup.number()).min(1, "One or more bands must be selected."),
	characters: yup.array().ensure().min(1, "One or more characters must be selected"),
	relationships: yup.array().ensure().of(
		yup.array().ensure().of(
			yup.string()
		).min(2, "Pairings must have at least two characters!").max(3, "Pairings can have no more than three characters!")
	),
	nsfw: yup.boolean().oneOf([true, false]),
	loggedInOnly: yup.boolean()
		.when("nsfw", ([nsfw], schema) => {
			return nsfw ? schema.oneOf([true], "If your story contains adult content, you MUST restrict the ability to read it to logged-in users only. Failure to comply may result in a takedown.") : schema.oneOf([true, false])
		}),
	hidden: yup.boolean().oneOf([true, false]),
	pot: yup.string().oneOf(["pasteOrType", "upload"]).required("Story content is required!"),
	storytext: yup.string().when("pot",
		([pot], schema) => {
			return pot === "pasteOrType" ?  schema.test("numWords", "Story must be at least 50 words", 
				(value:any, context) => {
					return value?.split(/\W+/).length > 50 || false
				}).required("Story text can't be blank!") : schema.min(0)
		}),
		// hello Celeste
	docFile: yup.mixed().when("pot", ([pot], schema) => {
		return pot === "upload" ? yup.mixed().test("exists", "You need to upload a file!", (value) => {
			// console.debug("file: ", value)
			return !!value;
		}).test("fileType", "Supported files are *.docx and *.doc", (value) => {
			let ext;
			if(typeof value == "string") {
				ext = value?.split(".").reverse()[0]
			} else {
				ext = (value as File)?.name?.split(".").reverse()[0]
			}
			// console.log(ext)
			let reg = /(docx|doc)$/i
			return reg.test(ext)
		}) : yup.mixed()
	} /* {
		is: "upload",
		then: ,
		otherwise: yup.mixed()
	} */)
})

export const storySchema = yup.object().shape({
	title: yup.string().ensure().min(5).required("Title cannot be blank"),
	chapters: yup.array().ensure().of(cs),
	completed: yup.boolean().oneOf([true, false])
})