package dto

import (
	"time"
)

// LoginRequest represents the login request payload
type LoginRequest struct {
	Identifier string `json:"identifier" validate:"required,min=3"`
	Password   string `json:"password" validate:"required,min=8"`
}

// LoginResponse represents the login response
type LoginResponse struct {
	Token           string        `json:"token"`
	User            UserInfo      `json:"user"`
	Companies       []CompanyInfo `json:"companies,omitempty"`
	ActiveCompanyID *string       `json:"activeCompanyId,omitempty"`
}

// UserInfo represents basic user information in responses
type UserInfo struct {
	ID         string `json:"id"`
	Identifier string `json:"identifier"`
	Role       string `json:"role"`
	FullName   string `json:"fullName"`
	Language   string `json:"language"`
}

// CompanyInfo represents basic company information
type CompanyInfo struct {
	ID   string `json:"id"`
	Name string `json:"name"`
	Role string `json:"role"` // Role in this company (admin or recruiter)
}

// RegisterRequest represents user registration
type RegisterRequest struct {
	Identifier string  `json:"identifier" validate:"required,min=3,max=50"`
	Password   string  `json:"password" validate:"required,min=8"`
	FullName   string  `json:"fullName" validate:"required"`
	Phone      *string `json:"phone,omitempty"`
	WhatsApp   *string `json:"whatsapp,omitempty"`
	LineID     *string `json:"lineId,omitempty"`
	Instagram  *string `json:"instagram,omitempty"`
	Language   string  `json:"language" validate:"required,oneof=pt en es ja"`
	Role       string  `json:"role" validate:"required,oneof=candidate recruiter admin"`

	// Candidate Specific
	BirthDate  string  `json:"birthDate,omitempty"` // YYYY-MM-DD
	Address    *string `json:"address,omitempty"`
	City       *string `json:"city,omitempty"`
	State      *string `json:"state,omitempty"`
	ZipCode    *string `json:"zipCode,omitempty"`
	Education  *string `json:"education,omitempty"`
	Experience *string `json:"experience,omitempty"`
	Skills     *string `json:"skills,omitempty"` // Comma separated or just text
	Objective  *string `json:"objective,omitempty"`
}

// User represents a generic user profile
type User struct {
	ID        string    `json:"id"`
	Name      string    `json:"name"`
	Email     string    `json:"email"`
	Role      string    `json:"role"`
	Status    string    `json:"status"`
	Phone     *string   `json:"phone,omitempty"`
	Bio       *string   `json:"bio,omitempty"`
	AvatarUrl *string   `json:"avatarUrl,omitempty"`
	CreatedAt time.Time `json:"createdAt"`
	CompanyID *string   `json:"companyId,omitempty"`
}
