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;
}

