﻿from pypos.core.base_model import BaseModel
from pypos.core.utils.db_helper import connect_sqlite
from pypos.core.utils.path_utils import get_db_path


# upgraded: inherit base class
class BarangModel(BaseModel):
    def __init__(self):
        super().__init__()
        self.db_path = get_db_path()

    def get_total_count(self, search_term=None):
        conn = connect_sqlite(self.db_path)
        cursor = conn.cursor()
        if search_term:
            cursor.execute("SELECT COUNT(*) FROM produk WHERE nama LIKE ?", ('%' + search_term + '%',))
        else:
            cursor.execute("SELECT COUNT(*) FROM produk")
        total = cursor.fetchone()[0]
        conn.close()
        return total

    def get_barang_paginated(self, offset, limit, search_term=None):
        conn = connect_sqlite(self.db_path)
        cursor = conn.cursor()
        if search_term:
            cursor.execute("""
                SELECT id, nama, hpp, harga_jual, deskripsi, diskon_persen
                FROM produk
                WHERE nama LIKE ?
                ORDER BY id ASC
                LIMIT ? OFFSET ?
            """, ('%' + search_term + '%', limit, offset))
        else:
            cursor.execute("""
                SELECT id, nama, hpp, harga_jual, deskripsi, diskon_persen
                FROM produk
                ORDER BY id ASC
                LIMIT ? OFFSET ?
            """, (limit, offset))
        rows = cursor.fetchall()
        conn.close()
        return rows

    def get_barang_by_id(self, produk_id):
        conn = connect_sqlite(self.db_path)
        cursor = conn.cursor()
        cursor.execute("SELECT id, nama, hpp, harga_jual, deskripsi, diskon_persen FROM produk WHERE id = ?", (produk_id,))
        row = cursor.fetchone()
        conn.close()
        return row

    def delete_barang(self, produk_id):
        conn = connect_sqlite(self.db_path)
        cursor = conn.cursor()
        cursor.execute("DELETE FROM produk WHERE id = ?", (produk_id,))
        conn.commit()
        conn.close()

    def update_barang(self, produk_id, nama, hpp, harga_jual, deskripsi, diskon):
        conn = connect_sqlite(self.db_path)
        cursor = conn.cursor()
        cursor.execute("""
            UPDATE produk
            SET nama=?, hpp=?, harga_jual=?, deskripsi=?, diskon_persen=?
            WHERE id=?
        """, (nama, hpp, harga_jual, deskripsi, diskon, produk_id))
        conn.commit()
        conn.close()

    def insert_barang(self, nama, hpp, harga_jual, deskripsi, diskon):
        conn = connect_sqlite(self.db_path)
        cursor = conn.cursor()
        cursor.execute("""
            INSERT INTO produk (nama, hpp, harga_jual, deskripsi, diskon_persen)
            VALUES (?, ?, ?, ?, ?)
        """, (nama, hpp, harga_jual, deskripsi, diskon))
        conn.commit()
        conn.close()
