# -*- coding: utf-8 -*-

import requests
import logging
from odoo import models, fields, api, _
from datetime import datetime, timedelta


_logger = logging.getLogger(__name__)

STATES = ['Active', 'Cancelled']


class HmsEmail(models.Model):
    _name = 'hms.email'
    _description = 'Hms Email'
    _rec_name = 'email'

    email = fields.Char(string="Email")


class HmsPhones(models.Model):
    _name = 'hms.phones'
    _description = 'Hms Phones'
    _rec_name = 'phone'

    phone = fields.Char(string="Phone")


class HmsCustomer(models.Model):
    _name = 'hms.customer'
    _description = 'Hms Customer'
    _rec_name = 'bid'

    bid = fields.Char(string="Customer ID", index=True)
    lastName = fields.Char(string="Last Name")
    firstName = fields.Char(string="First Name")
    middleName = fields.Char(string="Middle Name")
    birthDate = fields.Char(string="Birth Date")
    citizenshipCode = fields.Char(string="Citizenship Code")
    status = fields.Json(string="Status")
    emails = fields.Many2many(comodel_name="hms.email", string="Emails")
    phones = fields.Many2many(comodel_name="hms.phones", string="Phones")
    gender = fields.Char(string="Gender")


class HmsRooms(models.Model):
    _name = 'hms.rooms'
    _description = 'Hms Rooms'
    _rec_name = 'name'

    bid = fields.Char(string="Room ID", index=True)
    name = fields.Char(string="Name")
    roomTypeId = fields.Many2one(comodel_name="hms.room.types", string="Room Type")
    floorId = fields.Many2one(comodel_name="hms.floors", string="Floor")


class HmsRoomTypes(models.Model):
    _name = 'hms.room.types'
    _description = 'Hms Room Types'
    _rec_name = 'name'

    bid = fields.Char(string="Room Type ID", index=True)
    name = fields.Char(string="Name")


class HmsFloors(models.Model):
    _name = 'hms.floors'
    _description = 'Hms Floors'
    _rec_name = 'name'

    bid = fields.Char(string="Floor ID", index=True)
    name = fields.Char(string="Name")


class HmsGuests(models.Model):
    _name = 'hms.guests'
    _description = 'Hms Guests'
    _rec_name = 'bid'

    bid = fields.Char(string="Guest ID", index=True)
    lastName = fields.Char(string="Last Name")
    firstName = fields.Char(string="First Name")
    middleName = fields.Char(string="Middle Name")
    birthDate = fields.Char(string="Birth Date")
    citizenshipCode = fields.Char(string="Citizenship Code")
    status = fields.Json(string="Status")
    emails = fields.Many2many(comodel_name="hms.email", string="Emails")
    phones = fields.Many2many(comodel_name="hms.phones", string="Phones")
    gender = fields.Char(string="Gender")


class HmsAmenities(models.Model):
    _name = 'hms.amenities'
    _description = 'Hms Amenities'
    _rec_name = 'name'

    name = fields.Char(string="Name")


class HmsRoomStays(models.Model):
    _name = 'hms.roomstays'
    _description = 'Hms RoomStays'
    _rec_name = 'bid'

    bid = fields.Char(string="Room raw ID", index=True)
    bookingId = fields.Char(string="Booking ID", index=True)
    roomId = fields.Many2one(comodel_name="hms.rooms", string="Room ID")
    roomTypeId = fields.Many2one(comodel_name="hms.room.types", string="Room Type ID")
    guestsIds = fields.Many2many(comodel_name="hms.guests", string="Guests Ids")
    checkInDateTime = fields.Char(string="Check In Date Time")
    checkOutDateTime = fields.Char(string="Check Out Date Time")
    actualCheckInDateTime = fields.Char(string="Actual Check In Date Time")
    actualCheckOutDateTime  = fields.Char(string="Actual Check Out Date Time")
    status = fields.Many2one(comodel_name="hms.status", string="Status")
    bookingStatus = fields.Many2one(comodel_name="hms.booking.status", string="Booking Status")
    guestCountInfo = fields.Json(string="Guest Count Info")
    totalPrice = fields.Json(string="Total Price")
    amenities = fields.Many2many(comodel_name="hms.amenities", string="Amenities")

    bookings_id = fields.Many2one(comodel_name="hms.bookings", string="Room Stay Id")


class HmsSourceChannel(models.Model):
    _name = 'hms.source.channel'
    _description = 'Hms Source Channel'
    _rec_name = 'name'

    name = fields.Char(string="Name")


class HmsBookings(models.Model):
    _name = 'hms.bookings'
    _description = 'Hms Bookings'
    _rec_name = 'bid'

    bid = fields.Char(string="Booking ID", index=True)
    number = fields.Char(string="Booking Number", index=True)
    customerLanguage = fields.Char(string="Customer Language")
    visitPurpose = fields.Json(string="Visit Purpose")
    customerComment = fields.Char(string="Customer Comment")
    lastModified = fields.Char(string="Last Modified")
    groupName = fields.Char(string="Group Name")
    currencyId = fields.Char(string="Currency ID")
    customer = fields.Many2one(comodel_name="hms.customer", string="Customer")
    roomStays = fields.One2many(comodel_name="hms.roomstays", inverse_name="bookings_id", string="RoomStays")
    customerCompany = fields.Json(string="Customer Company")
    source = fields.Json(string="RoomStays (Json)")
    sourceChannelName = fields.Many2one(comodel_name="hms.source.channel", string="Source Channel Name")


class HmsStatus(models.Model):
    _name = 'hms.status'
    _description = 'Hms Status'
    
    name = fields.Char(string="Status", required=True)


class HmsBookingStatus(models.Model):
    _name = 'hms.booking.status'
    _description = 'Hms Booking Status'
    
    name = fields.Char(string="Booking Status", required=True)


class HmsAgents(models.Model):
    _name = 'hms.agents'
    _description = 'Hms Agents'
    _rec_name = 'name'
    
    index = fields.Integer(string="Index")
    bid = fields.Char(string="Agent ID", index=True)
    name = fields.Char(string="Name")
    inn = fields.Char(string="Tax ID")
    kpp = fields.Char(string="Tax Registration Reason Code")
    phone = fields.Many2one(comodel_name="hms.phones", string="Phone")
    email = fields.Many2one(comodel_name="hms.email", string="Email")
    legalAddress = fields.Char(string="Registered Address")
    mailingAddress = fields.Char(string="Postal Address")


class HmsServiceKinds(models.Model):
    _name = 'hms.service.kinds'
    _description = 'Hms Service Kinds'
    _rec_name = 'name'

    name = fields.Char(string="Name")
    hms_id = fields.Integer(string="ID")


class HmsServiceVatKinds(models.Model):
    _name = 'hms.service.vat.kinds'
    _description = 'Hms Service Vat Kinds'
    _rec_name = 'name'

    name = fields.Char(string="Name")
    hms_id = fields.Integer(string="ID")


class HmsServices(models.Model):
    _name = 'hms.services'
    _description = 'Hms Services'
    _rec_name = 'bid'

    bid = fields.Char(string="ID")
    kind = fields.Many2one(comodel_name="hms.service.kinds", string="Kind")
    name = fields.Char(string="Name")
    amount = fields.Float(string="Amount")
    discount = fields.Float(string="Discount")
    vat_kind = fields.Many2one(comodel_name="hms.service.vat.kinds", string="VAT Kind")
    vat = fields.Float(string="VAT")
    quantity = fields.Integer(string="Quantity")
    service_date = fields.Datetime(string="Date")
    reservationId = fields.Char(string="Reservation")
    optionCategory = fields.Char(string="Option Category")
    isIncluded = fields.Boolean(string="Is Included")