using System.Xml.Serialization;

namespace economy.Models.Whois.IP
{
    [XmlRoot("response")]
    public class Response
    {
        [XmlElement("result")]
        public Result Result { get; set; }

        [XmlElement("whois")]
        public Whois Whois { get; set; }
    }

    public class Result
    {
        // 결과 코드
        [XmlElement("result_code")]
        public int ResultCode { get; set; }

        // 결과 메시지
        [XmlElement("result_msg")]
        public string ResultMsg { get; set; }
    }

    public class Whois
    {
        // 질의어
        [XmlElement("query")]
        public string Query { get; set; }

        // IP 종류
        [XmlElement("queryType")]
        public string QueryType { get; set; }

        // 등록대행사
        [XmlElement("registry")]
        public string Registry { get; set; }

        // 국가 코드
        [XmlElement("countryCode")]
        public string CountryCode { get; set; }

        [XmlElement("korean")]
        public Korean Korean { get; set; }

        [XmlElement("english")]
        public English English { get; set; }

        [XmlElement("error")]
        public Error Error { get; set; }
    }

    public class Korean
    {
        [XmlElement("ISP")]
        public ISP ISP { get; set; }

        [XmlElement("user")]
        public User User { get; set; }
    }

    public class English
    {
        [XmlElement("ISP")]
        public ISP ISP { get; set; }

        [XmlElement("user")]
        public User User { get; set; }
    }

    public class ISP
    {
        [XmlElement("netInfo")]
        public NetInfo NetInfo { get; set; }

        [XmlElement("techContact")]
        public TechContact TechContact { get; set; }
    }

    public class User
    {
        [XmlElement("netInfo")]
        public NetInfo NetInfo { get; set; }

        [XmlElement("techContact")]
        public TechContact TechContact { get; set; }
    }

    public class NetInfo
    {
        // IP 대역(영문)
        [XmlElement("range")]
        public string Range { get; set; }

        // IP Prefix(영문)
        [XmlElement("prefix")]
        public string Prefix { get; set; }

        // 기관 이름(영문)
        [XmlElement("orgName")]
        public string OrgName { get; set; }

        // 연결 서비스 이름(영문)
        [XmlElement("servName")]
        public string ServName { get; set; }

        // 기관 ID(영문)
        [XmlElement("orgID")]
        public string OrgID { get; set; }

        // 주소(영문)
        [XmlElement("addr")]
        public string Addr { get; set; }

        // 우편번호(영문)
        [XmlElement("zipCode")]
        public string ZipCode { get; set; }

        // 등록일자(영문)
        [XmlElement("regDate")]
        public string RegDate { get; set; }

        [XmlElement("netType")]
        public string NetType { get; set; }
    }

    public class TechContact
    {
        // 네트워크 담당자 이름
        [XmlElement("name")]
        public string Name { get; set; }

        // 네트워크 담당자 전화번호
        [XmlElement("phone")]
        public string Phone { get; set; }

        // 네트워크 담당자 이메일 주소
        [XmlElement("email")]
        public string Email { get; set; }
    }

    public class Error
    {
        [XmlElement("query")]
        public string Query { get; set; }

        [XmlElement("error_code")]
        public string ErrorCode { get; set; }

        [XmlElement("error_msg")]
        public string ErrorMsg { get; set; }
    }
}
