package models

import (
	"time"

	"github.com/golang-jwt/jwt/v5"
)



type Claims struct {
	UserID int 
	Role   int
	jwt.RegisteredClaims
}

type TokenResponse struct {
	Token string 
	User  User   
}

type ErrorResponse struct {
	Error   string   
	Details []string 
}

type Role struct {
    RoleID    int       
    Name      string    
    CreatedAt time.Time 
    UpdatedAt time.Time 
}

type User struct {
    UserID    int       
    FirstName string    
    LastName  string    
    Email     string    
    Phone     string    
    Password  string    
    RoleID    int
    AdminCode *string  
    CreatedAt time.Time 
    UpdatedAt time.Time 
}

type UserAddress struct {
    UserID      int       
    AddressLine1 string   
    AddressLine2 string   
    City         string   
    Province     string   
    Country      string   
    PostalCode   string   
    CreatedAt    time.Time
    UpdatedAt    time.Time
}

// =====================
// Address Database
// =====================

type AddressDatabase struct {
    AddressID       int       
    Address         string    
    StreetName      string    
    StreetType      string    
    StreetQuadrant  string    
    HouseNumber     string    
    HouseAlpha      *string    
    Longitude       float64   
    Latitude        float64   
    VisitedValidated bool     
    CreatedAt       time.Time 
    UpdatedAt       time.Time 
    Assigned       bool // <-- add this

}

// =====================
// Teams & Assignments
// =====================


type Team struct {
    TeamID      int      
    TeamLeadID  int      
    VolunteerID int      
    CreatedAt   time.Time
    UpdatedAt   time.Time
}

type AdminVolunteer struct {
    AdminID    int       
    VolunteerID int      
    IsActive   bool      
    CreatedAt  time.Time 
    UpdatedAt  time.Time 
}

type Appointment struct {
    SchedID        int       
    UserID         int       
    AddressID      int       
    AppointmentDate time.Time
    AppointmentTime time.Time
    CreatedAt      time.Time 
    UpdatedAt      time.Time 
}

// =====================
// Polls & Responses
// =====================

type Poll struct {
    PollID       int       
    AddressID    int       
    UserID       int       
    ResponseURL  string    
    AmountDonated float64  
    CreatedAt    time.Time 
    UpdatedAt    time.Time 
}

type PollResponse struct {
    ResponseID     int       
    PollID         int       
    Signage        bool      
    VotingChoice   string    
    DonationAmount float64   
    CreatedAt      time.Time 
}

// =====================
// Updates & Reactions
// =====================

type Post struct {
    PostID    int
    AuthorID  int
    AuthorName string // for display
    Content   string
    ImageURL  string
    CreatedAt time.Time
}


type Reaction struct {
    ReactionID   int       
    PostID       int       
    UserID       int       
    ReactionType string    
    CreatedAt    time.Time 
}

// =====================
// Volunteer Availability
// =====================

type Availability struct {
    AvailabilityID int       
    UserID         int       
    DayOfWeek      string    
    StartTime      time.Time 
    EndTime        time.Time 
    CreatedAt      time.Time 
}

// =====================
// Chat Links
// =====================

type ChatLink struct {
    ChatID    int       
    Platform  string    
    URL       string    
    UserID    *int      
    TeamID    *int      
    CreatedAt time.Time 
}
