'use client';
import { useState, useActionState } from 'react';
import { FoxHelperText } from '@fox/core/components/fox-helper-text';
import { FoxInput } from '@fox/core/components/fox-input';
import { FoxPageHeader } from '@fox/core/components/fox-page-header';
import { FoxRadio } from '@fox/core/components/fox-radio';
import { FoxRadioGroup } from '@fox/core/components/fox-radio-group';
import { FoxSelect } from '@fox/core/components/fox-select';
import { FoxTextArea } from '@fox/core/components/fox-text-area';
import { submitFormAction } from '@/app/_hooks/submit-form-action';
import {
ANSWER_MESSAGE_ETC,
ANSWER_MESSAGE_OPTIONS,
QUIZ_ANSWER_OPTIONS,
QUIZ_LEVEL_OPTIONS,
type QuizItem,
type GradesBySchool,
} from '@/lib/domain/content';
import {
ANSWER_MESSAGE_MAX_LENGTH,
INITIAL_CONTENT_FORM_STATE,
MESSAGE_MAX_LENGTH,
QUESTION_MAX_LENGTH,
} from '@/lib/domain/content-form';
import { contentBreadcrumb, contentListPath } from '@/lib/domain/content-query';
import type { CommonCode } from '@/lib/domain/common-code';
import { createQuizAction, updateQuizAction } from '../../_actions';
import { ContentFormActions } from '../../_components/content-form-actions';
import { ContentFormRow } from '../../_components/content-form-row';
import { ContentGradeField } from '../../_components/content-grade-field';
import { ContentKeywordField } from '../../_components/content-keyword-field';
import { ContentVisibilityField } from '../../_components/content-visibility-field';
import styles from '../../_components/content-form.module.scss';
interface QuizFormProps {
schools: readonly CommonCode[];
gradesBySchool: GradesBySchool;
item?: QuizItem;
}
/**
* 콘텐츠 등록·수정 (금융OX퀴즈) — 시안 5402:12360.
*
* 정답여부는 O·X 두 줄이고, 고른 쪽에서만 「사용자에게 노출할 문구」를 정한다(기획 ③).
* 「기타」를 고르면 문구를 직접 적는다.
*/
export function QuizForm({ schools, gradesBySchool, item }: QuizFormProps) {
const isEdit = item !== undefined;
const [state, formAction, isPending] = useActionState(
isEdit ? updateQuizAction : createQuizAction,
INITIAL_CONTENT_FORM_STATE
);
const [answer, setAnswer] = useState(item?.answer || QUIZ_ANSWER_OPTIONS[0]);
const [messageCode, setMessageCode] = useState(ANSWER_MESSAGE_OPTIONS[0].value);
const [messageText, setMessageText] = useState('');
const errors = state.status === 'error' ? (state.errors ?? {}) : {};
return (
<>