-- =======================================================
-- USER TABLE
-- =======================================================

CREATE TABLE users (
                       id SERIAL PRIMARY KEY,
                       username VARCHAR(50) NOT NULL UNIQUE,
                       password VARCHAR(255) NOT NULL,
                       email VARCHAR(100)
);

-- =======================================================
-- MENU ITEM TABLE
-- =======================================================

CREATE TABLE menu_items (
                            id SERIAL PRIMARY KEY,
                            name VARCHAR(100) NOT NULL,
                            description TEXT,
                            price NUMERIC(10,2) NOT NULL CHECK (price > 0),
                            category VARCHAR(50)
);

-- =======================================================
-- ORDERS TABLE
-- =======================================================

CREATE TABLE orders (
                        id SERIAL PRIMARY KEY,
                        user_id INT NOT NULL,
                        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                        total_price NUMERIC(10,2) NOT NULL DEFAULT 0,

                        CONSTRAINT fk_orders_user
                            FOREIGN KEY (user_id)
                                REFERENCES users(id)
                                ON DELETE CASCADE
);

-- =======================================================
-- ORDER DETAIL TABLE
-- =======================================================

CREATE TABLE order_details (
                               id SERIAL PRIMARY KEY,
                               order_id INT NOT NULL,
                               menu_item_id INT NOT NULL,
                               quantity INT NOT NULL CHECK (quantity > 0),
                               price_at_purchase NUMERIC(10,2) NOT NULL,

                               CONSTRAINT fk_order_details_order
                                   FOREIGN KEY (order_id)
                                       REFERENCES orders(id)
                                       ON DELETE CASCADE,

                               CONSTRAINT fk_order_details_menu_item
                                   FOREIGN KEY (menu_item_id)
                                       REFERENCES menu_items(id)
);

-- =======================================================
-- INITIAL MENU DATA
-- =======================================================

INSERT INTO menu_items (name, description, price, category) VALUES
                                                                ('Margherita Pizza', 'Classic cheese pizza', 10.00, 'Pizza'),
                                                                ('Cheeseburger', 'Beef burger with cheese', 8.50, 'Burger'),
                                                                ('Spaghetti Bolognese', 'Pasta with meat sauce', 12.00, 'Pasta'),
                                                                ('Coca Cola', 'Cold soft drink', 2.50, 'Drink');

-- =======================================================
-- OPTIONAL TEST USER
-- =======================================================

INSERT INTO users (username, password, email) VALUES
    ('admin', 'hashed_password_here', 'admin@example.com');

-- =======================================================
-- VERIFICATION QUERIES
-- =======================================================

-- SELECT * FROM users;
-- SELECT * FROM menu_items;
-- SELECT * FROM orders;
-- SELECT * FROM order_details;