Toggl Track client
use chrono::NaiveDateTime;

use crate::schema::time_entries;

#[derive(Debug, Queryable)]
pub(crate) struct TimeEntry {
    pub(crate) id: i32,
    pub(crate) server_id: Option<i64>,
    pub(crate) description: String,
    pub(crate) start: NaiveDateTime,
    pub(crate) stop: Option<NaiveDateTime>,
}

#[derive(Insertable, AsChangeset)]
#[table_name = "time_entries"]
pub(crate) struct ServerTimeEntry {
    pub(crate) server_id: Option<i64>,
    pub(crate) description: String,
    pub(crate) start: NaiveDateTime,
    pub(crate) stop: Option<NaiveDateTime>,
}

impl From<toggl_api::TimeEntry> for ServerTimeEntry {
    fn from(entry: toggl_api::TimeEntry) -> Self {
        Self {
            server_id: Some(entry.id.into()),
            description: entry.description,
            start: entry.start.naive_utc(),
            stop: entry.stop.map(|m| m.naive_utc()),
        }
    }
}