-- Схема для хранения сырых данных с сайтов отелей

-- Сырой HTML со страниц
CREATE TABLE IF NOT EXISTS hotel_website_raw (
    id SERIAL PRIMARY KEY,
    hotel_id UUID REFERENCES hotel_main(id),
    url TEXT NOT NULL,
    page_title TEXT,
    html TEXT,  -- Сырой HTML
    status_code INTEGER,
    response_time_ms INTEGER,
    depth INTEGER,  -- 0 = главная, 1 = внутренняя ссылка
    crawled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(hotel_id, url)
);

-- Метаинформация о парсинге сайта
CREATE TABLE IF NOT EXISTS hotel_website_meta (
    hotel_id UUID PRIMARY KEY REFERENCES hotel_main(id),
    domain TEXT,
    main_url TEXT,
    pages_crawled INTEGER DEFAULT 0,
    pages_failed INTEGER DEFAULT 0,
    total_size_bytes BIGINT DEFAULT 0,
    internal_links_found INTEGER,
    crawl_status TEXT,  -- 'in_progress', 'completed', 'failed'
    crawl_started_at TIMESTAMP,
    crawl_finished_at TIMESTAMP,
    error_message TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Обработанный текст (после очистки, для векторизации)
CREATE TABLE IF NOT EXISTS hotel_website_processed (
    id SERIAL PRIMARY KEY,
    raw_page_id INTEGER REFERENCES hotel_website_raw(id),
    hotel_id UUID REFERENCES hotel_main(id),
    url TEXT,
    cleaned_text TEXT,  -- Очищенный текст
    extracted_data JSONB,  -- Телефоны, email, ИНН, ОГРН и т.д.
    has_forms BOOLEAN,
    has_booking BOOLEAN,
    text_length INTEGER,
    processed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Индексы
CREATE INDEX IF NOT EXISTS idx_website_raw_hotel_id ON hotel_website_raw(hotel_id);
CREATE INDEX IF NOT EXISTS idx_website_raw_url ON hotel_website_raw(url);
CREATE INDEX IF NOT EXISTS idx_website_meta_status ON hotel_website_meta(crawl_status);
CREATE INDEX IF NOT EXISTS idx_website_processed_hotel_id ON hotel_website_processed(hotel_id);

COMMENT ON TABLE hotel_website_raw IS 'Сырой HTML со страниц сайтов отелей (исходники)';
COMMENT ON TABLE hotel_website_meta IS 'Метаинформация о краулинге сайтов';
COMMENT ON TABLE hotel_website_processed IS 'Обработанный текст для векторизации';




