from .kimaiapi import (
    KimaiAPI,
    Customer as KimaiAPICustomer,
    Project as KimaiAPIProject,
    Activity as KimaiAPIActivity,
)
from .db import (
    db,
    KimaiProject,
    KimaiCustomer,
    KimaiActivity,
)


def sync() -> None:
    api = KimaiAPI()

    KimaiCustomer.delete().execute()
    KimaiProject.delete().execute()
    KimaiActivity.delete().execute()

    customers = KimaiAPICustomer.list(api)
    with db.atomic():
        KimaiCustomer.insert_many(
            [
                {
                    "id": customer.id,
                    "name": customer.name,
                    "visible": customer.visible,
                }
                for customer in customers
            ]
        ).execute()

    projects = KimaiAPIProject.list(api)
    with db.atomic():
        KimaiProject.insert_many(
            [
                {
                    "id": project.id,
                    "name": project.name,
                    "customer_id": project.customer.id,
                    "allow_global_activities": project.allow_global_activities,
                    "visible": project.visible,
                }
                for project in projects
            ]
        ).execute()

    activities = KimaiAPIActivity.list(api)
    with db.atomic():
        KimaiActivity.insert_many(
            [
                {
                    "id": activity.id,
                    "name": activity.name,
                    "project_id": (activity.project.id if activity.project else None),
                    "visible": activity.visible,
                }
                for activity in activities
            ]
        ).execute()