package entity

import (
	"time"

	"github.com/google/uuid"
)

type ApprovalWorkflowSteps struct {
	ID                    uint   `json:"id" gorm:"primaryKey;type:int4;autoIncrement"`
	WorkflowId            uint   `json:"workflow_id" gorm:"type:int4;not null"`
	StepOrder             int    `json:"step_order" gorm:"type:int4;not null"`
	StepName              string `json:"step_name" gorm:"type:varchar;not null"`
	RequiredUserLevelId   uint   `json:"required_user_level_id" gorm:"type:int4;not null"`
	CanSkip               *bool  `json:"can_skip" gorm:"type:bool;default:false"`
	AutoApproveAfterHours *int   `json:"auto_approve_after_hours" gorm:"type:int4"`
	IsActive              *bool  `json:"is_active" gorm:"type:bool;default:true"`

	// Multi-branch support fields
	ParentStepId   *uint   `json:"parent_step_id" gorm:"type:int4;references:approval_workflow_steps(id)"`
	ConditionType  *string `json:"condition_type" gorm:"type:varchar(50)"` // 'user_level', 'user_level_hierarchy', 'always', 'custom'
	ConditionValue *string `json:"condition_value" gorm:"type:text"`       // JSON string for conditions
	IsParallel     *bool   `json:"is_parallel" gorm:"type:bool;default:false"`
	BranchName     *string `json:"branch_name" gorm:"type:varchar(100)"`
	BranchOrder    *int    `json:"branch_order" gorm:"type:int4"` // Order within the same branch

	ClientId  *uuid.UUID `json:"client_id" gorm:"type:UUID"`
	CreatedAt time.Time  `json:"created_at" gorm:"default:now()"`
	UpdatedAt time.Time  `json:"updated_at" gorm:"default:now()"`

	// Relations
	Workflow          ApprovalWorkflows       `json:"workflow" gorm:"foreignKey:WorkflowId;constraint:OnDelete:CASCADE"`
	RequiredUserLevel UserLevels              `json:"required_user_level" gorm:"foreignKey:RequiredUserLevelId"`
	ParentStep        *ApprovalWorkflowSteps  `json:"parent_step" gorm:"foreignKey:ParentStepId"`
	ChildSteps        []ApprovalWorkflowSteps `json:"child_steps" gorm:"foreignKey:ParentStepId"`
}
