// Package docs Code generated by swaggo/swag. DO NOT EDIT
package docs

import "github.com/swaggo/swag"

const docTemplate = `{
    "schemes": {{ marshal .Schemes }},
    "swagger": "2.0",
    "info": {
        "description": "{{escape .Description}}",
        "title": "{{.Title}}",
        "contact": {},
        "version": "{{.Version}}"
    },
    "host": "{{.Host}}",
    "basePath": "{{.BasePath}}",
    "paths": {
        "/admin/update/data": {
            "post": {
                "description": "Accepts a JSON data file upload (admin only), parses it, and returns the number of records",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Admin"
                ],
                "summary": "Upload data file",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Admin authentication token",
                        "name": "X-Admin-Token",
                        "in": "header",
                        "required": true
                    },
                    {
                        "type": "file",
                        "description": "Data file to upload (JSON format)",
                        "name": "file",
                        "in": "formData",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Example: {\\\"count\\\": 42}",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "object",
                                            "additionalProperties": {
                                                "type": "integer"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Bad Request: missing or invalid file",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized: missing or invalid admin token",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/auth/google/callback": {
            "get": {
                "description": "Exchanges authorization code for token, fetches Google user info, generates JWT, and redirects to frontend",
                "tags": [
                    "Auth"
                ],
                "summary": "Handle Google OAuth callback",
                "parameters": [
                    {
                        "type": "string",
                        "description": "OAuth state returned by Google",
                        "name": "state",
                        "in": "query",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Authorization code returned by Google",
                        "name": "code",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "302": {
                        "description": "Redirects to frontend with JWT in query param"
                    },
                    "400": {
                        "description": "Code not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Invalid or expired OAuth state",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/google/login": {
            "get": {
                "description": "Generates a Google login URL and saves a temporary OAuth state to prevent CSRF",
                "tags": [
                    "Auth"
                ],
                "summary": "Generate Google OAuth login URL",
                "parameters": [
                    {
                        "type": "string",
                        "default": "/",
                        "description": "Redirect path after successful login",
                        "name": "redirect",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Returns the Google OAuth URL",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/status": {
            "get": {
                "description": "Checks if the user is authenticated based on JWT (sent via Authorization header)",
                "tags": [
                    "Auth"
                ],
                "summary": "Get authentication status",
                "responses": {
                    "200": {
                        "description": "Returns isAuthenticated: true/false",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "boolean"
                            }
                        }
                    }
                }
            }
        },
        "/courses/semester/{semesterID}": {
            "get": {
                "description": "Returns all courses for a specific semester",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "courses"
                ],
                "summary": "Get courses by semester",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Semester ID",
                        "name": "semesterID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/services.CourseMinimal"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/courses/semester/{semesterID}/department/{departmentID}": {
            "get": {
                "description": "Returns all courses for a specific semester and department",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "courses"
                ],
                "summary": "Get courses by semester and department",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Semester ID",
                        "name": "semesterID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Department ID",
                        "name": "departmentID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/services.CourseMinimal"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/courses/{courseId}/detail": {
            "get": {
                "description": "Returns course details including instructor, department, class time, and semester",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "courses"
                ],
                "summary": "Get course detail",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Course ID",
                        "name": "courseId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/definitions/handlers.CourseDetail"
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/departments/": {
            "get": {
                "description": "Returns all departments",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "departments"
                ],
                "summary": "Get departments",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/services.DepartmentMinimal"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/departments/data": {
            "get": {
                "description": "Returns all departments with additional details",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "departments"
                ],
                "summary": "Get detailed department data",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/services.DepartmentDataResponse"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/instructors/courses/{instructorID}": {
            "get": {
                "description": "Returns courses of an instructor per semester",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "instructors"
                ],
                "summary": "Get instructor courses",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Instructor ID",
                        "name": "instructorID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/handlers.InstructorCoursesData"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/instructors/data": {
            "get": {
                "description": "Returns instructors along with their relations",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "instructors"
                ],
                "summary": "Get instructors data",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/handlers.InstructorsData"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/instructors/{instructorID}/detail": {
            "get": {
                "description": "Returns detailed information about an instructor",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "instructors"
                ],
                "summary": "Get instructor detail",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Instructor ID",
                        "name": "instructorID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/schedule/data": {
            "get": {
                "description": "Returns schedule information including courses, instructors, times, and departments",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "schedule"
                ],
                "summary": "Get schedule data",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/handlers.ScheduleData"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/semesters/": {
            "get": {
                "description": "Returns all semesters",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "semesters"
                ],
                "summary": "Get semesters",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/services.SemesterData"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        },
        "/user/courses": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Saves a list of course IDs for the authenticated user. If any of the IDs do not exist in the courses table, none are saved and the invalid IDs are returned.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Save user's courses",
                "parameters": [
                    {
                        "description": "Course IDs",
                        "name": "input",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.UserCoursesRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "User courses saved successfully",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/handlers.UserCourseResponse"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Invalid course IDs",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/utils.APIResponse"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "type": "integer"
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "$ref": "#/definitions/utils.APIResponse"
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "handlers.CourseDetail": {
            "type": "object",
            "properties": {
                "classTime": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/services.ScheduleTime"
                    }
                },
                "course": {
                    "$ref": "#/definitions/services.CourseDetail"
                },
                "department": {
                    "$ref": "#/definitions/services.DepartmentMinimal"
                },
                "instructor": {
                    "$ref": "#/definitions/services.InstructorByID"
                },
                "semeter": {
                    "$ref": "#/definitions/services.SemesterData"
                }
            }
        },
        "handlers.InstructorCoursesData": {
            "type": "object",
            "properties": {
                "courses": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/services.InstructorCourse"
                    }
                },
                "semester": {
                    "$ref": "#/definitions/services.SemesterData"
                }
            }
        },
        "handlers.InstructorsData": {
            "type": "object",
            "properties": {
                "instructor": {
                    "$ref": "#/definitions/services.InstructorMinimal"
                },
                "relations": {
                    "$ref": "#/definitions/services.InstructorRelations"
                }
            }
        },
        "handlers.ScheduleData": {
            "type": "object",
            "properties": {
                "course": {
                    "$ref": "#/definitions/services.ScheduleCourse"
                },
                "department": {
                    "$ref": "#/definitions/services.ScheduleDepartment"
                },
                "instructor": {
                    "$ref": "#/definitions/services.ScheduleInstructor"
                },
                "time": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/services.ScheduleTimeID"
                    }
                }
            }
        },
        "handlers.UserCourseResponse": {
            "type": "object",
            "properties": {
                "course_id": {
                    "type": "integer"
                },
                "id": {
                    "type": "integer"
                },
                "user_id": {
                    "type": "integer"
                }
            }
        },
        "handlers.UserCoursesRequest": {
            "type": "object",
            "properties": {
                "courseIds": {
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                }
            }
        },
        "services.CourseDetail": {
            "type": "object",
            "properties": {
                "capacity": {
                    "type": "string"
                },
                "class_type": {
                    "type": "string"
                },
                "department_id": {
                    "type": "integer"
                },
                "final_exam_date": {
                    "type": "string"
                },
                "final_exam_time": {
                    "type": "string"
                },
                "group": {
                    "type": "string"
                },
                "id": {
                    "type": "integer"
                },
                "instructor_id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                },
                "number": {
                    "type": "string"
                },
                "semester_id": {
                    "type": "integer"
                },
                "student_count": {
                    "type": "string"
                },
                "time_in_week": {
                    "type": "string"
                },
                "units": {
                    "type": "string"
                }
            }
        },
        "services.CourseMinimal": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "services.DepartmentDataResponse": {
            "type": "object",
            "properties": {
                "courses_count": {
                    "type": "integer"
                },
                "id": {
                    "type": "integer"
                },
                "instructors_count": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "services.DepartmentMinimal": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "services.InstructorByID": {
            "type": "object",
            "properties": {
                "field": {
                    "type": "string"
                },
                "id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "services.InstructorCourse": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "services.InstructorMinimal": {
            "type": "object",
            "properties": {
                "field": {
                    "type": "string"
                },
                "id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "services.InstructorRelations": {
            "type": "object",
            "properties": {
                "department_id": {
                    "type": "integer"
                },
                "instructor_id": {
                    "type": "integer"
                },
                "semester_id": {
                    "type": "integer"
                }
            }
        },
        "services.ScheduleCourse": {
            "type": "object",
            "properties": {
                "department_id": {
                    "type": "integer"
                },
                "group": {
                    "type": "string"
                },
                "id": {
                    "type": "integer"
                },
                "instructor_id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                },
                "number": {
                    "type": "string"
                },
                "semester_id": {
                    "type": "integer"
                },
                "units": {
                    "type": "string"
                }
            }
        },
        "services.ScheduleDepartment": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "services.ScheduleInstructor": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "services.ScheduleTime": {
            "type": "object",
            "properties": {
                "day": {
                    "type": "string"
                },
                "end_time": {
                    "type": "string"
                },
                "room": {
                    "type": "string"
                },
                "start_time": {
                    "type": "string"
                }
            }
        },
        "services.ScheduleTimeID": {
            "type": "object",
            "properties": {
                "course_id": {
                    "type": "integer"
                },
                "day": {
                    "type": "string"
                },
                "end_time": {
                    "type": "string"
                },
                "room": {
                    "type": "string"
                },
                "start_time": {
                    "type": "string"
                }
            }
        },
        "services.SemesterData": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "utils.APIResponse": {
            "type": "object",
            "properties": {
                "data": {},
                "message": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                }
            }
        }
    }
}`

// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = &swag.Spec{
	Version:          "",
	Host:             "",
	BasePath:         "",
	Schemes:          []string{},
	Title:            "",
	Description:      "",
	InfoInstanceName: "swagger",
	SwaggerTemplate:  docTemplate,
	LeftDelim:        "{{",
	RightDelim:       "}}",
}

func init() {
	swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
}
