package main

import "time"

type User struct {
	ID   int    `json:"id"`
	Name string `json:"name"`
}

type UserWithAllowance struct {
	ID        int     `json:"id"`
	Name      string  `json:"name"`
	Allowance float64 `json:"allowance"`
}

type History struct {
	Allowance float64   `json:"allowance"`
	Timestamp time.Time `json:"timestamp"`
}

type PostHistory struct {
	Allowance float64 `json:"allowance"`
}

// Task represents a task in the system.
type Task struct {
	ID       int     `json:"id"`
	Name     string  `json:"name"`
	Reward   float64 `json:"reward"`
	Assigned *int    `json:"assigned"` // Pointer to allow null
}

type Allowance struct {
	ID       int     `json:"id"`
	Name     string  `json:"name"`
	Target   float64 `json:"target"`
	Progress float64 `json:"progress"`
	Weight   float64 `json:"weight"`
	Colour   string  `json:"colour"`
}

type CreateAllowanceRequest struct {
	Name   string  `json:"name"`
	Target float64 `json:"target"`
	Weight float64 `json:"weight"`
	Colour string  `json:"colour"`
}

type UpdateAllowanceRequest struct {
	Name   string  `json:"name"`
	Target float64 `json:"target"`
	Weight float64 `json:"weight"`
	Colour string  `json:"colour"`
}

type BulkUpdateAllowanceRequest struct {
	ID     int     `json:"id"`
	Weight float64 `json:"weight"`
}

type CreateGoalResponse struct {
	ID int `json:"id"`
}

type CreateTaskRequest struct {
	Name     string  `json:"name" binding:"required"`
	Reward   float64 `json:"reward"`
	Assigned *int    `json:"assigned"`
}

type CreateTaskResponse struct {
	ID int `json:"id"`
}