import { localChapterId, roleId } from "../database";
import { DataStructure } from "@/src/components/base/DataStructure";
import { LocalChapterSchema } from "./localChapter";
import { RoleSchema } from "./role";

export interface User {
    id: number;
    member_code: string;
    profile_picture: string;
    name: string;
    surname: string;
    nickname?: string;
    birthday: Date;
    email: string;
    joined_date: Date;
    gender: number;
    interest?: string;
    password: string;
    chapter_id: number;
    role_id: number;
}

export const UserSchema: DataStructure[] = [
    {
        fieldId: "id",
        type: "number",
        displayName: "User ID",
        hideFromCRUD: true
    },
    {
        fieldId: "member_code",
        type: "string",
        displayName: "Member code",
        length: 200,
        required: true
    },
    {
        fieldId: "profile_picture",
        type: "file",
        displayName: "Profile Picture",
        length: 500,
        required: true,
        hideFromList: true
    },
    {
        fieldId: "name",
        type: "string",
        displayName: "Name",
        length:200,
        required: true
    },
    {
        fieldId: "surname",
        type: "string",
        displayName: "Surname",
        length: 200,
        required: true,
        hideFromList: true
    },
    {
        fieldId: "nickname",
        type: "string",
        displayName: "Nickname",
        length: 200,
        hideFromList: true
    },
    {
        fieldId: "birthday",
        type: "date",
        displayName: "Birthday",
        required: true,
        hideFromList: true,
        hint: "Birthday in Christian Era"
    },
    {
        fieldId: "email",
        type: "string",
        displayName: "Email",
        length: 200,
        required: true
    },
    {
        fieldId: "joined_date",
        type: "date",
        displayName: "Joined Date",
        required: true,
        defaultValue: () => new Date()
    },
    {
        fieldId: "gender",
        type: "number",
        displayName: "Gender",
        options: [
            {
                label: "Male",
                value: "1"
            },
            {
                label: "Female",
                value: "2"
            }
        ],
        required: true,
        defaultValue: () => {
            return 1;
        }
    },
    {
        fieldId: "interest",
        type: "string",
        displayName: "Interest",
        hideFromList: true
    },
    {
        fieldId: "password",
        type: "password",
        displayName: "Password",
        hideFromList: true,
        hideFromView: true,
        length: 500,
        required: true,
        hint: "Password for you to retrieve record in future"
    },
    {
        fieldId: "confirm_password",
        type: "password",
        displayName: "Confirm Password",
        hideFromList: true,
        hideFromView: true,
        length: 500,
        required: true,
        isConfirmation: true,
        confirmationField: "password"
    },
    {
        fieldId: "chapter_id",
        type: "reference",
        referenceId: localChapterId,
        referenceStructure: LocalChapterSchema,
        referenceAlias: "chapter",
        referenceParentAlias: "users",
        referenceDisplay: "chapter_name",
        displayName: "Local Chapter",
        required: true
    },
    {
        fieldId: "role_id",
        type: "reference",
        referenceId: roleId,
        referenceStructure: RoleSchema,
        referenceAlias: "role",
        referenceParentAlias: "users",
        referenceDisplay: "role_name",
        displayName: "Role",
        required: true,
        defaultValue: () => "Member"
    }
]