import { DataStructure } from "@/src/components/base/DataStructure";
import { EventTypeSchema } from "./eventType";
import { LocalChapterSchema } from "./localChapter";
import { UserSchema } from "./user";
import { eventTypeId, localChapterId, userId } from "../database";

export interface Event {
    id: number;
    event_name: string;
    event_start_date: Date;
    event_end_date: Date;
    venue: string;
    description?: string;
    chairperson_id: number;
    type_id: number;
    approved_by?: number;
    approved_date: Date;
    chapter_id: number;
    status: number;
    cost: number;
    max_capacity: number;
}

export const EventSchema: DataStructure[] = [
    {
        fieldId: "id",
        type: "number",
        displayName: "Event ID",
        hideFromCRUD: true
    },
    {
        fieldId: "event_name",
        type: "string",
        displayName: "Event Name",
        length: 500,
        required: true
    },
    {
        fieldId: "event_start_date",
        type: "date",
        displayName: "Event Start Date",
        required: true
    },
    {
        fieldId: "event_end_date",
        type: "date",
        displayName: "Event End Date",
        required: true
    },
    {
        fieldId: "venue",
        type: "string",
        displayName: "Venue",
        length: 500,
        required: true
    },
    {
        fieldId: "description",
        type: "string",
        displayName: "Description",
        length: 500,
        hideFromList: true
    },
    {
        fieldId: "chairperson_id",
        type: "reference",
        referenceId: userId,
        referenceStructure: UserSchema,
        referenceAlias: "chairperson",
        referenceParentAlias: "events",
        referenceDisplay: "name",
        displayName: "Chairperson",
        required: true,
        defaultValue: () => "Creator"
    },
    {
        fieldId: "type_id",
        type: "reference",
        referenceId: eventTypeId,
        referenceStructure: EventTypeSchema,
        referenceAlias: "event_type",
        referenceParentAlias: "events",
        referenceDisplay: "type",
        displayName: "Event Type",
        required: true,
        hideFromList: true
    },
    {
        fieldId: "approved_by",
        type: "reference",
        referenceId: userId,
        referenceStructure: UserSchema,
        referenceAlias: "approver",
        referenceParentAlias: "events",
        referenceDisplay: "name",
        displayName: "Approved By",
        hideFromList: true
    },
    {
        fieldId: "approved_date",
        type: "date",
        displayName: "Approved Date",
        required: true,
        defaultValue: () => new Date()
    },
    {
        fieldId: "chapter_id",
        type: "reference",
        referenceId: localChapterId,
        referenceStructure: LocalChapterSchema,
        referenceAlias: "chapter",
        referenceParentAlias: "events",
        referenceDisplay: "chapter_name",
        displayName: "Local Chapter",
        required: true,
        hideFromList: true
    },
    {
        fieldId: "status",
        type: "number",
        displayName: "Status",
        required: true,
        options: [
            {
                label: "Pending",
                value: "1"
            },
            {
                label: "Accepted",
                value: "2"
            },
            {
                label: "Rejected",
                value: "3"
            }
        ],
        defaultValue: () => {
            return 1;
        }
    },
    {
        fieldId: "cost",
        type: "number",
        displayName: "Cost",
        required: true,
        defaultValue: () => 0
    },
    {
        fieldId: "max_capacity",
        type: "number",
        displayName: "Max Capacity",
        required: true,
        defaultValue: () => 100
    }
]