import { ReactNode } from 'react'; // ============================================ // TIPOS DE AUTENTICAÇÃO // ============================================ export interface User { email: string; nome: string; apelido: string; contacto: string; morada: string; nif: string; id_user?: string; [key: string]: any; } export interface AuthContextType { user: User | null; token: string | null; isAuthenticated: boolean; isLoading: boolean; login: (email: string, password: string) => Promise; logout: () => Promise; updateProfile: (nome?: string, apelido?: string, oldPassword?: string, newPassword?: string) => Promise; error: string | null; } export interface LoginResponse { status: number; message?: string; token?: string; user?: User; [key: string]: any; } export interface ApiMessageResponse { status: number; message?: string; } export interface UserData { email: string; nome: string; apelido: string; contacto: string; morada: string; nif: string; } export interface AuthProviderProps { children: ReactNode; } // ============================================ // TIPOS DE RESERVAS // ============================================ export interface Reserva { destino: string; referenciaAgencia: string; referenciaViagem: string; startDate: string; status: string; statusCode: string; imagemCidade: string; pais: string; } export interface ReservasResponse { status: string | number; user?: User; message?: string; reservas: Reserva[]; } export interface HotelFoto { src: string; srcZoom: string; alt: string; } export interface Passageiro { nome: string; sobrenome: string; genero: string; dataNascimento: string; nacionalidade: string; morada: string; paisEmissao: string; numeroDocumento: string; dataDeEmissao: string; dataDeValidade: string; telemovel: string; email: string; } export interface HotelInfo { name: string; data: string; noites: number; regime: string; quarto: string; id_hotel: string; imagemexterna: string; imageminterna: string; stars: string; } export interface Escala { companyCode: string; company: string; number: string; departureAirportCode: string; mapaAirportDeparture?: string; departureAirport: string; departureDateTime: string; departureDate: string; departureTime: string; arrivalAirportCode: string; mapaAirportArrival?: string; arrivalAirport: string; arrivalDateTime: string; arrivalDate: string; arrivalTime: string; flightTime: string; mala: boolean; malaLabel: string; class: string; infoAeroportoDeparture?: InfoAeroporto; infoAeroportoArrival?: InfoAeroporto; } export interface VooSegment { departureDate: string; departureTime: string; arrivalDate: string; arrivalTime: string; number: string; class: string; malaLabel: string; departureAirportCode: string; arrivalAirportCode: string; departureAirport: string; arrivalAirport: string; departureAirportTimeZone: string; arrivalAirportTimeZone: string; flightTime: string; } export interface VooLeg { departureDate: string; infoEscalas: Escala[]; infoAeroportoDeparture?: InfoAeroporto; infoAeroportoArrival?: InfoAeroporto; } export interface InfoAeroporto { name: string; timezone: string; iso_country?: string; gps: { lng: number | string; lat: number | string; }; } export interface Extra { name: string; price: number; } export type VooDirection = VooLeg | VooSegment[]; export interface JsonData { hotel: HotelInfo[]; voo: { departure: VooDirection; arrival: VooDirection; }; extra?: Extra[]; extras?: Extra[]; } export interface Cidade { id_cidade: string; cod_pais: string; imagem: string; imagem_banner: string; thumbnail: string; destaque: string; destaque_top: string; outros_destinos: string; lat: string; lng: string; zoom: string; ordem: string; reference: string; ordemFooter: string; html_image_social: string; activofooter: string; activo: string; cod_tag: string; categoria: string; lowAeroporto: string; lowData: string; lowNoites: string; lowRegimeKey: string; lowPreco: string; imagemMenu: string; } export interface ReservaData { id_reserva: string; destino: string; startDate: string; endDate: string; referenciaViagem: string; referenciaAgencia: string; localizador: string; noites: string; status: string; pessoas: string; adultos: string; criancas: string; quartos: string; jsonData: string | JsonData; precoTotalFinal: string; valorPago: string; valorAPagar: string; operador: string; linkTransfers?: string; cidade: Cidade | null; imagemCidade?: string; infoCidade: string; passageiros: Passageiro[]; quartosPassageiros?: QuartoPassageiro[]; } export interface QuartoPassageiro { cod_user_api: string; idade: string; } export interface ReservaResponse { status: number; message?: string; reserva?: ReservaData; pagamentos?: Pagamento[]; documentos?: Documento[]; } export interface Pagamento { valor: string; estado: string; metodoPagamento: string; data_hora: string; data_pagamento: string; } export interface Documento { nome: string; idDocumento: string; caminhoFicheiro: string; checksum: string | null; } // ============================================ // TIPOS DE PERFIL // ============================================ export interface UserInfo { nome: string; apelido: string; email: string; } export interface UserInfoResponse { status: number; message?: string; user?: UserInfo; } // ============================================ // TIPOS DE CONTACTOS // ============================================ export interface ContactData { email: string; telephone: string; mobilePhone: string; address: string; horarios: string; whatsapp: string | null; emergencyPhone: string | null; coordenadas?: string | null; } export interface SocialMedia { key: string; title: string; value: string; } export interface ContactResponse { status: number; message?: string; contact?: ContactData; socials?: SocialMedia[]; } // ============================================ // TIPOS DE COMPONENTES // ============================================ export interface CardDestinoProps { destino: string; referenciaAgencia: string; referenciaViagem: string; startDate: string; status: string; statusCode: string; imagemCidade: string; imageUrl: string; color: string; textColor: string; } // ============================================ // TIPOS DE DOCUMENTOS CHECKSUMS // ============================================ export interface DocumentoChecksum { idDocumento: string; checksum: string; nome: string; caminhoFicheiro: string; } export interface ReservaDocumentos { referenciaViagem: string; documentos: DocumentoChecksum[]; } export interface DocumentosChecksumsResponse { status: number; message?: string; documentos: ReservaDocumentos[]; }