import { PagingQuery } from '../common/types'

export interface PdfTemplate {
	id: number
	/**
	 * User specific name of the PDF template
	 */
	name: string
	/**
	 * The HTML content used for rendering PDFs. Scriban syntax is used for the data templates. See here: https://github.com/scriban/scriban
	 * The template should contain the {{ticket.qr_code_link}} required image.
	 */
	content: string
	/**
	 * Flag indicates if this PDF template should be used as the default one, if none is specified.
	 */
	isDefault: boolean
}

export interface CreatePdfTemplate {
	name: string
	content: string
	isDefault: boolean
}

export interface UpdatePdfTemplate {
	name?: string
	content?: string
	isDefault?: boolean
}

export interface ListPdfTemplatesQuery extends PagingQuery {
	name?: string
}

export interface ListPdfTemplatesResponse {
	data: PdfTemplate[]
	limit: number
	offset: number
	total: number
}

export type PdfOrderContact = {
	email: string
	phone: string
	firstName: string
	lastName: string
	billingEmail: string
	street1: string
	street2: string
	city: string
	state: string
	country: string
	zip: string
}

export type PdfOrganizer = {
	name: string
	displayName?: string
	taxNumber?: string
	address?: {
		street1?: string
		city?: string
		country?: string
		zip?: string
	}
	contact?: {
		email?: string
		phone?: string
	}
}

export type PdfVenue = {
	name?: string
	address?: {
		street1?: string
		city?: string
		country?: string
		zip?: string
	}
}

export type PdfEvent = {
	name: string
	description?: string
	venue?: PdfVenue
	startAt?: string
	endAt?: string
	gateTime?: string
}

export type PdfTicketHolder = {
	honorific?: string
	firstName?: string
	lastName?: string
	address?: {
		street1?: string
		city?: string
		country?: string
		zip?: string
	}
}

export type PdfTicket = {
	purchaseDate: string
	ticketId: string
	qrCodeLink: string
	person?: PdfTicketHolder
	ticketCategory?: string
	price?: number
	currency?: string
	sector?: string
	row?: string
	seat?: string
}

export interface PdfTicketData {
	event: PdfEvent
	organizer: PdfOrganizer
	tickets: PdfTicket[]
	contact: Partial<PdfOrderContact>
}

export interface RenderPdfWithCustomTemplateRequest {
	template: string
	pdfTicket: PdfTicketData
}
