# Ruby To-Do List Application - API Tasks Controller
# Created by: Molla Samser (help@rskworld.in, +91 93305 39277)
# Address: Nutanhat, Mongolkote, Purba Burdwan, West Bengal, India, 713147
# Year: 2026

module Api
  module V1
    class TasksController < BaseController
      def index
        @tasks = current_user.tasks.includes(:category).order(priority: :desc, created_at: :desc)
        render_success(@tasks.as_json(include: :category))
      end

      def show
        @task = current_user.tasks.includes(:category).find(params[:id])
        render_success(@task.as_json(include: :category))
      end

      def create
        @task = current_user.tasks.build(task_params)

        if @task.save
          render_success(@task.as_json(include: :category), status: :created)
        else
          render_error(@task.errors.full_messages.join(', '))
        end
      end

      def update
        @task = current_user.tasks.find(params[:id])

        if @task.update(task_params)
          render_success(@task.as_json(include: :category))
        else
          render_error(@task.errors.full_messages.join(', '))
        end
      end

      def destroy
        @task = current_user.tasks.find(params[:id])
        @task.destroy
        render_success({ message: 'Task deleted successfully' })
      end

      def toggle_complete
        @task = current_user.tasks.find(params[:id])
        @task.toggle_completion!
        render_success(@task.as_json(include: :category))
      end

      def completed
        @tasks = current_user.tasks.completed.includes(:category).order(completed_at: :desc)
        render_success(@tasks.as_json(include: :category))
      end

      def pending
        @tasks = current_user.tasks.pending.includes(:category).order(priority: :desc, created_at: :desc)
        render_success(@tasks.as_json(include: :category))
      end

      private

      def task_params
        params.require(:task).permit(:title, :description, :priority, :due_date, :completed, :category_id)
      end
    end
  end
end