export enum UserRole { SUPERADMIN = "SUPERADMIN", BUSINESS_OWNER = "BUSINESS_OWNER", EVENT_OWNER = "EVENT_OWNER", PHOTOGRAPHER = "PHOTOGRAPHER", AGENDA_VIEWER = "AGENDA_VIEWER", RESEARCHER = "RESEARCHER", } export enum UserApprovalStatus { PENDING = "PENDING", APPROVED = "APPROVED", REJECTED = "REJECTED", } export enum EventStatus { PENDING_APPROVAL = "Aguardando Aprovação", // Novo status para clientes PLANNING = "Em Planejamento", CONFIRMED = "Confirmado", IN_PROGRESS = "Em Execução", DELIVERED = "Entregue", ARCHIVED = "Arquivado", } export enum EventType { GRADUATION = "Formatura", COLATION = "Colação de Grau", ACADEMIC_WEEK = "Semana Acadêmica", FRESHMAN_WEEK = "Semana de Calouros", SYMPOSIUM = "Simpósio/Congresso", DEFENSE = "Defesa de TCC/Mestrado/Doutorado", SPORTS_EVENT = "Evento Esportivo Universitário", CULTURAL_EVENT = "Evento Cultural", OTHER = "Outro", } export interface User { id: string; name: string; email: string; role: UserRole; avatar?: string; institutionId?: string; // Instituição vinculada ao usuário approvalStatus?: UserApprovalStatus; // Status de aprovação do cadastro registeredInstitution?: string; // Nome da instituição cadastrada durante o registro (se houver) phone?: string; // Telefone do usuário createdAt?: string; // Data de criação do cadastro ativo?: boolean; empresaId?: string; // ID da empresa vinculada (para Business Owners) companyName?: string; // Nome da empresa vinculada allowedRegions?: string[]; // Regiões permitidas para o usuário professionalId?: string; // ID do profissional vinculado (se houver) // Client / Event Owner specific fields cpf_cnpj?: string; cep?: string; endereco?: string; numero?: string; complemento?: string; bairro?: string; cidade?: string; estado?: string; } export interface Institution { id: string; name: string; type: string; // Ex: Universidade Pública, Universidade Privada, Faculdade, etc. cnpj?: string; phone: string; email: string; address?: Address; description?: string; ownerId: string; // ID do usuário que criou a instituição } export interface Course { id: string; name: string; // Ex: "Engenharia Civil 2025", "Medicina - Turma A" institutionId: string; // ID da instituição vinculada year: number; // Ano da turma semester?: number; // Semestre (opcional) graduationType: string; // Ex: "Bacharelado", "Licenciatura", "Tecnológico" createdAt: string; createdBy: string; // ID do admin que cadastrou isActive: boolean; // Permite desativar turmas antigas } export interface Address { street: string; number: string; city: string; state: string; zip: string; lat?: number; lng?: number; mapLink?: string; // URL from Google Maps Grounding } export interface Contact { id: string; name: string; role: string; phone: string; email: string; } export interface ChecklistItem { id: string; task: string; completed: boolean; required: boolean; } export enum AssignmentStatus { PENDING = "PENDENTE", ACCEPTED = "ACEITO", REJECTED = "REJEITADO", } export interface Assignment { professionalId: string; status: AssignmentStatus; reason?: string; funcaoId?: string; is_coordinator?: boolean; } export interface EventData { id: string; name: string; date: string; time: string; // Mantido por compatibilidade, mas deprecated startTime?: string; // Horário de início endTime?: string; // Horário de término type: EventType; status: EventStatus; address: Address; contacts: Contact[]; checklist: ChecklistItem[]; briefing: string; coverImage: string; ownerId: string; // ID do cliente dono do evento photographerIds: string[]; // IDs dos fotógrafos designados institutionId?: string; // ID da instituição vinculada (obrigatório) attendees?: number; // Número de pessoas participantes logisticaNotificacaoEnviadaEm?: string; data_evento?: string; // Data Original do banco regiao?: string; // Região do evento courseId?: string; // ID do curso/turma relacionado ao evento fotId?: string; // ID da Turma (FOT) fot_finalizada?: boolean; // Status da Turma (Visualizacao no Dashboard) fot_pre_venda?: boolean; // Status de Pré-Venda (vindo do FOT) pre_venda?: boolean; // Status de Pré-Venda typeId?: string; // ID do Tipo de Evento (UUID) // Campos de gestão de equipe e recursos qtdFormandos?: number; // Quantidade de formandos qtdFotografos?: number; // Quantidade de fotógrafos necessários qtdRecepcionistas?: number; // Quantidade de recepcionistas necessários qtdCinegrafistas?: number; // Quantidade de cinegrafistas necessários qtdEstudios?: number; // Quantidade de estúdios necessários qtdPontosFoto?: number; // Quantidade de pontos de foto necessários qtdPontosDecorados?: number; // Quantidade de pontos decorados necessários qtdPontosLed?: number; // Quantidade de pontos LED necessários qtdPlataforma360?: number; // Quantidade de Plataforma 360 // Fields populated from backend joins (ListAgendas) fot?: string; // Nome/Número da Turma (FOT) curso?: string; // Nome do Curso instituicao?: string; // Nome da Instituição anoFormatura?: string; // Ano/Semestre empresa?: string; // Nome da Empresa observacoes?: string; // Observações da FOT tipoEventoNome?: string; // Nome do Tipo de Evento local_evento?: string; // Nome do Local (Salão, Igreja, etc) assignments?: Assignment[]; // Lista de status de atribuições } export interface Professional { id: string; usuario_id?: string; nome: string; regiao?: string; // Add region to interface name?: string; // Restore for compatibility email?: string; funcao_profissional_id: string; role?: string; // Optional, for UI display if needed (e.g. from join) avatar?: string; // Legacy/UI avatar_url?: string; // Backend field phone?: string; // Detailed fields matching backend endereco?: string; cidade?: string; uf?: string; cep?: string; whatsapp?: string; cpf_cnpj_titular?: string; banco?: string; agencia?: string; conta_pix?: string; carro_disponivel?: boolean; tem_estudio?: boolean; qtd_estudio?: number; tipo_cartao?: string; observacao?: string; // Ratings qual_tec?: number; educacao_simpatia?: number; desempenho_evento?: number; disp_horario?: number; media?: number; tabela_free?: string; extra_por_equipamento?: boolean; equipamentos?: string; // Availability (kept for compatibility, though might not be in main payload) availability?: { [date: string]: boolean }; functions?: { id: string; nome: string }[]; } export interface CreateProfessionalDTO { nome: string; regiao?: string; funcao_profissional_id: string; // Keep for compatibility (primary function) funcoes_ids?: string[]; // New multi-select email?: string; endereco?: string; cidade?: string; uf?: string; cep?: string; whatsapp?: string; cpf_cnpj_titular?: string; banco?: string; agencia?: string; conta_pix?: string; carro_disponivel?: boolean; tem_estudio?: boolean; qtd_estudio?: number; tipo_cartao?: string; observacao?: string; qual_tec?: number; educacao_simpatia?: number; desempenho_evento?: number; disp_horario?: number; media?: number; tabela_free?: string; extra_por_equipamento?: boolean; equipamentos?: string; avatar_url?: string; }