import type { TaskStatus } from './task-status'
import type { TaskEffort } from './task-effort'
import type { TaskPriority } from './task-priority'
import type { TaskTag } from './task-tag'
import type { TaskGroup } from './task-group'
import type { UserData } from '~/services/dto/user-data'
import type { Project } from './project'
import type { TaskDocument } from './task-document'

export type Task = {
    id: number
    '@id'?: string
    number: number
    title: string
    description: string | null
    status: TaskStatus | null
    effort: TaskEffort | null
    priority: TaskPriority | null
    assignee: UserData | null
    collaborators: UserData[]
    group: TaskGroup | null
    project: Project | null
    tags: TaskTag[]
    documents: TaskDocument[]
    archived: boolean
    scheduledStart: string | null
    scheduledEnd: string | null
    deadline: string | null
    syncToCalendar: boolean
    calendarSyncError: string | null
    recurrence: {
        id: number
        '@id'?: string
        type: 'daily' | 'weekly' | 'monthly' | 'yearly'
        interval: number
        daysOfWeek: string[] | null
        dayOfMonth: number | null
        weekOfMonth: number | null
        endDate: string | null
        maxOccurrences: number | null
        occurrenceCount: number
    } | null
}

export type TaskWrite = {
    title: string
    description: string | null
    status: string | null
    effort: string | null
    priority: string | null
    assignee: string | null
    collaborators?: string[]
    group: string | null
    project: string
    tags: string[]
    archived?: boolean
    scheduledStart?: string | null
    scheduledEnd?: string | null
    deadline?: string | null
    syncToCalendar?: boolean
    recurrence?: string | null
}
