import psycopg2
from faker import Faker
import random
from datetime import timedelta

# Настройки подключения
conn = psycopg2.connect(
    dbname="PractikaMebelV18",
    user="postgres",
    password="postgresql",  
    host="localhost",
    port="5432"
)
cursor = conn.cursor()

fake = Faker("ru_RU")
Faker.seed(0)
random.seed(0)

# Добавляем 2000 покупателей
for _ in range(2000):
    name = f"ООО {fake.company()}"
    address = fake.address().replace("\n", ", ")
    phone = fake.phone_number()
    cursor.execute("""
        INSERT INTO Покупатель (название, адрес, телефон)
        VALUES (%s, %s, %s)
    """, (name, address, phone))

# мебель
models = []
types = ['СК', 'Т', 'Ш']
for typ in types:
    for i in range(1,5100):
        model = f"{typ}-{i}"
        desc = f"{typ}-{i} {fake.word()} из ДСП"
        price = round(random.uniform(1500, 8000), 2)
        cursor.execute("""
            INSERT INTO Модель_мебели (название_модели, модель, характеристики, стоимость)
            VALUES (%s, %s, %s, %s)
        """, (typ, model, desc, price))
        models.append((typ, model))

# Добавляем 3000 договоров
contract_ids = []
for _ in range(3000):
    buyer_id = random.randint(1, 2000)
    start_date = fake.date_between(start_date='-1y', end_date='-1d')
    end_date = start_date + timedelta(days=random.randint(1, 20))
    cursor.execute("""
        INSERT INTO Договор (код_покупателя, дата_оформления, дата_исполнения)
        VALUES (%s, %s, %s)
        RETURNING номер_договора
    """, (buyer_id, start_date, end_date))
    contract_id = cursor.fetchone()[0]
    contract_ids.append(contract_id)

# Добавляем продажи (по 3–5 на договор)
for contract_id in contract_ids:
    for _ in range(random.randint(3, 5)):
        model_type, model_code = random.choice(models)
        qty = random.randint(1, 15)
        cursor.execute("""
            INSERT INTO Продажа (номер_договора, название_модели, модель, количество)
            VALUES (%s, %s, %s, %s)
        """, (contract_id, model_type, model_code, qty))

# Завершаем
conn.commit()
cursor.close()
conn.close()

print("База данных успешно заполнена.")
