use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::path::PathBuf;

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ProjectTemplate {
    pub id: Option<i64>,
    pub name: String,
    pub description: Option<String>,
    pub default_tags: Vec<String>,
    pub default_goals: Vec<TemplateGoal>,
    pub workspace_path: Option<PathBuf>,
    pub created_at: DateTime<Utc>,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TemplateGoal {
    pub name: String,
    pub target_hours: f64,
    pub description: Option<String>,
}

impl ProjectTemplate {
    pub fn new(name: String) -> Self {
        Self {
            id: None,
            name,
            description: None,
            default_tags: Vec::new(),
            default_goals: Vec::new(),
            workspace_path: None,
            created_at: Utc::now(),
        }
    }

    pub fn with_description(mut self, description: String) -> Self {
        self.description = Some(description);
        self
    }

    pub fn with_tags(mut self, tags: Vec<String>) -> Self {
        self.default_tags = tags;
        self
    }

    pub fn with_goals(mut self, goals: Vec<TemplateGoal>) -> Self {
        self.default_goals = goals;
        self
    }

    pub fn with_workspace_path(mut self, path: PathBuf) -> Self {
        self.workspace_path = Some(path);
        self
    }
}

